Edited at

RailsのRender関数をオーバライドして端末に応じてレイアウトを変える

More than 3 years have passed since last update.

結局、別のアプローチで対応したのですが端末の種類に応じてrenderするlayoutを変えてみました。

オーバライドを使ったアプローチです。

不採用だったのですが、別でつかえそうなので備忘のため書いておきます。


コード

  def render *args

if request.device_type == :smartphone
logger.debug :layout
args.push(:layout=>"sp_layout")
super *args
else
super *args
end
end


解説

スマートフォンだった場合、レイアウトをsp_layoutを指定してレンダーしたい、

といった内容です。


super

呼び出すと継承前のrender関数の実行されます。


*arg

引数を展開した状態で受け取っています。rubyはアスタリスクをつけると変数展開します。

子側でrender 1,2,3,4の実行された場合、オーバライド側ではその引数を親に渡す必要があります。

配列のポインタをうけとり、内容を展開してsuperの引数にしています。

追記

引数を変更したりする必要がない場合はsuperと書くと引数を渡さなくても

暗黙的に渡してくれているそうです。

コメントありがとうございました。