I originally posted this article on Intridea's Blog at http://www.intridea.com/2008/7/21/mobilize-your-rails-application-with-mobile-fu. I thought I'd go ahead and post it here as well. No worries, if you've read it before, it's the exact same thing.Let's face it, iPhone interfaces are awesome, but they can only cater to a fraction of the mobile market. What are you to do if you want to satisfy the rest of the mobile world? Mobile Fu helps to make this job much easier by automatically detecting mobile devices that access your Rails application. People can access your site from a Palm, Blackberry, iPhone, Nokia, etc. and it will automatically adjust the format of the request from :html to :mobile.
Learn Mobile Fu
First off, just install the Mobile Fu plugin into your Rails application.
script/plugin install git://github.com/brendanlim/mobile-fu.git
Start by adding this one line to your ApplicationController.
class ApplicationController < ActionController::Base has_mobile_fu end
Once this is in place, any request that comes from a mobile device will be be set as :mobile format. It is up to you to determine how you want to handle these requests by creating the .mobile.erb versions of your views that are to be requested. Also, I recommend that you setup a before_filter that will redirect to a specific page depending on whether or not it is a mobile request. How can you check this?
is_mobile_device? # => Returns true or false depending on the device
You can also determine which format is currently set in by calling the method below.
is_mobile_view? # => Returns true or false depending on current req. format
If you want the ability to allow a user to switch between ‘mobile’ and ‘standard’ format (:html), you can just adjust the mobile_view session variable in a custom controller action.
session[:mobile_view] # => Set to true if request format is :mobile and false # if set to :html
What About Custom Mobile Styling?
Different devices need different styling. Don’t worry though, we’ve got this baked in to Mobile Fu (thanks to Intridea's own Michael Bleigh, who created Browserized Styles for letting me modify his code). If you are including a css or sass file via stylesheet_link_tag, all you have to do is add _device to the name of one of your files to override your styling for a certain device. The stylesheet that is loaded is dependant on which device is making the request.Supported stylesheet override device extensions at the moment are: blackberry, iphone, mobileexplorer, nokia, palm
e.g., Accessing a page from a Blackberry. Ends up loading mobile.css, and mobile_blackberry.css if the file exists.
You can check out Mobile Fu's very own project page at Acts As Community. If you have any problems or would like me to add a certain feature, please create a ticket at http://blim.lighthouseapp.com/projects/14490-mobile-fu/. Also, feel free to fork Mobile Fu and make any enhancements you please from its GitHub location at: http://github.com/brendanlim/mobile-fu/tree/master