結局、別のアプローチで対応したのですが端末の種類に応じて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と書くと引数を渡さなくても
暗黙的に渡してくれているそうです。
コメントありがとうございました。