私の宝石では、特定の条件でレイアウトを変更したいだけです。特定の条件でのみレイアウトを変更してください
私はレイアウトを指定するメソッドを持つことができますが、そのメソッドの現在のレイアウトをどのように指すことができますか?私は_layout
がレイアウト名を指していることを知りましたが、レイアウトを指定するメソッドでスタックオーバーフローが発生しました。
ここに(私のエンジンのアプリケーションコントローラで)明確化のために私のコードです:
layout :get_layout
def get_layout
current = _layout # this is what I want, but causes a stack overflow
request.path_info.include?('/baco/') ? 'baco' : current
end
したがって、たとえば:この宝石を持つアプリケーションは、「qday」と呼ばれるレイアウトを指定し、今逸品場合、レイアウトを変更する必要がありますパスには 'baco'が含まれていますが、そうでない場合は 'qday'と表示されます。
ありがとうございます!
素晴らしい、このメソッドは、私のために働く、ありがとう! jdoeにコメントされているように、コントローラごとの方法はこの状況で私のために働いていません。 2つのデバイスモデルを制御する1つのコントローラに2つのレイアウトが必要なためです。パス条件は、私が2つを分けるために見つけた唯一の方法です。 –
同じコントローラに複数のレイアウトが必要な場合は、それを必要とするアクションに対して:layout => "baco"オプションを指定したメソッドでrenderを呼び出します。 –
1) 'before_filter set_baco_layout' - ' set_baco_layout'はシンボルでなければなりません。 2) 'self.class.layout'を使うと巨大な落とし穴になります。レイアウトを設定すると、URLに' baco'がなくてもさらに使用されます - 誰がデフォルトにリセットするのでしょうか? – jdoe