Skip to content

How To: Make Devise work with other formats like mobile, iphone and ipad (Rails specific)

ovargas27 edited this page Aug 9, 2011 · 9 revisions

1.Make your app render Apple iOS templates for iOS devices like iPhone, iPad, iPod Touch, etc. In the Rails app/controllers/application_controller.rb add this code:

  before_filter :adjust_format_for_iphone
  private
    def adjust_format_for_iphone    
          request.format = :ios if ios_user_agent?
    end
    
    def ios_user_agent?
        request.env["HTTP_USER_AGENT"]
        request.env["HTTP_USER_AGENT"][/(Mobile\/.+Safari)/]
    end
```

2.Set Devise to display views for iOS
In the `config/initializers/devise.rb`, look for the 'config.navigational_formats' and add every other formats you have
`config.navigational_formats = [:"*/*", "*/*", :html, :ios]`

3.Create each view you need for Devise (login form, signup form, ...)
Name your view like 'new.**ios**.erb'
eg: 'app/views/devise/sessions/new.ios.erb' for login form

4.Create an initializer in the folder config/initializers
Add this code into your initializer

```ruby
ActionController::Responder.class_eval do
  alias :to_ios :to_html
end
```
This code has to correspond to your format (ie: :to_ios, :to_ipad, :to_mobile)

5.Add your format to config/initilaizers/mime_types.rb

```Mime::Type.register_alias "text/html", :ios
```
Clone this wiki locally