2011-08-13 11 views
8

私はMobile Devices railscastで同じ手法を使用して、モバイルブラウザで自分のサイトの代替レイアウトを提供してきました。モバイルデバイスで別のRailsレイアウト(同じビュー)を使用する

モバイルブラウザが検出されると、request.formatはmobileに設定されます。これはmimeタイプとして定義されています。 私はモバイルデバイス用の新しいレイアウトを作成しました。 モバイルビュー(例:show.mobile.haml)を提供すると、モバイルビューとレイアウトの両方がモバイルデバイスで使用され、すべてがうまくいきます。

問題は、全く新しいビューを作成したくないということです。変更したいレイアウトだけです。適切に名前付きのビューを作成しないと、モバイルレイアウトは決して使用されません。つまり、現状のままでは、私はモバイルデバイスの両方を変更することも、どちらも変更することもできません。

私はここで何が欠けていますか?私はモバイルユーザーを持っているときにレイアウトをちょうどに交換するにはどうすればいいですか?あなたはrailscastsからmobile_device?メソッドを追加したと仮定すると、

答えて

18

は、単にapplication_controller.rbに以下を追加します。

layout :which_layout 
    def which_layout 
    mobile_device? ? 'mobile' : 'application' 
    end 

アプリ/ビュー/レイアウト

でmobile.html.erbファイルを作成するようにしてください

同じビューをレンダリングしたいので、request.formatの設定について心配しないでください。

+0

ありがとう、それは私が探していたものです。 – Kelly

4

私はいつも、要求されたフォーマットをHTMLからモバイルに切り替えることが慣習に反していることを発見しました。それはツールを完全に誤用するので、DRYを続行しようとすると問題に遭っているのは当然のことです。

リクエストされたフォーマットを切り替えるのではなく、特定のリクエストがモバイルデバイスからのものかどうかを確認し、それに基づいてレイアウトを設定します。 Bing、Bang、boom - done。誰か他の人がしていたために関係のない何かでおどろくことはなく、あなたは仕事に戻ることができます。

私はコードを投稿したいが、tybro0103はちょうどブートのためのリンクでパンチに殴られる。うーん、ああ!

+1

+1私よりもそれを説明するために:) – tybro0103