モバイルとデスクトップのさまざまなファイルをレンダリングします

StackOverflow https://stackoverflow.com/questions/4417767

質問

私は小さなWebアプリを使用してコーディングしています http://padrinorb.org (HAML+LESSCSS)モバイル(Android/iPhone/iPad)とデスクトップユーザーの両方の場合、さまざまなデバイスにわずかに異なるHTML/CSSを表示したいと思います。

さまざまなクライアントを決定するために、これまでにうまく機能するRack-Mobile-Detectを使用しています。

レイアウトを取得してレイアウト/application.mobileこれらのヘルパー/ラッパーを使用します render

def preferred_extension 
  if request.xhr?
    "js"
  elsif env["X_MOBILE_DEVICE"]
    "mobile"
  else
    "html"
  end 
end 

def preferred_layout 
  if preferred_extension.eql? "html"
    "application"
  else
    "application.#{preferred_extension}"
  end 
end 

def render_preferred filename
  filename = "#{filename}.#{preferred_extension}"
  if request.xhr?
    layout_file = false
  else
    layout_file = "layouts/#{preferred_layout}".to_sym
  end
  render filename, :layout => layout_file
end 

しかし、これは部分的なものを扱うときに私を助けません...そして、誰かがレンダリングを包むだけでなく、ヘルパーで部分的なものよりも良い解決策を持っている必要があると感じています。

私が望んでいるのは、正しいレイアウトを使用して正しい部分/ファイルをレンダリングするためだけに、私のコントローラーとビューを奇妙なコードで振りかけないことです。

レンダリングディスカバリーを使用するファイルを見つけて、filename.hamlに戻るFilenameがない場合は、Filename.hamlに戻ります。

Railsには、以前のプロジェクトで使用したこのマイムタイプのものがありますが、Padrino(Sinatra)に似たものはありません

役に立ちましたか?

解決

設定して解決しました @_content_type 各アプリ/コントローラー内のブロックの前のブロックでfeled_extension/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top