deviseとmobyletteでNo renderer defined for format: mobileになる

mobyletteのmobileとのviewファイルの切り替え方法が、MIME typeを変えるという非常にワイルドな方法なために、deviseでのrespond_with()で mobile なんてフォーマットのrendererねえよって言われてしまう。

これは、Railsのrenderを担当してるControllerに変更を加えることで解決する。

Railsのアプリが立ち上がったときに、to_mobileto_htmlメソッドのaliasを貼るようにします。僕は config/initializers/mobile_responder.rbってファイルを作成しました。

ActionController::Responder.class_eval do
  alias :to_mobile :to_html
end

そしたら、deviseの方で :mobileMIME Typeに対応できるように設定しておきます。

# config/initializers/devise.rb
config.navigational_formats = [:"*/*", "*/*", :html, :mobile]

オープンクラスは使ってるわけだし若干モンキーパッチな感じで汚すのでよいわけではないと思う。