6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-28

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

6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?