2012-01-03 3 views
3

私のコントローラでは、私はlayout 'application', :only => :editRailsの条件付きレイアウト:なぜ ":for"はレイアウトメソッドのオプションとして機能しますか?

を使用しています。しかし、私はlayout 'application', :for => :editが同様に動作することに気づきました。

ドキュメントのみが言及しているので、好奇心が強いです。:only & :except私はlayoutメソッドのどのドキュメントでも、:forを明示的に見つけることはできません。

Rails v2.3 - layout (railsapi.com)

Rails v3.1 - layout (apidock.com)

+1

をあなたはそれが**だけ**は 'application'を使用していることを意味していますあなたの 'edit'アクションのためのレイアウトはありますが、他のものはありませんか?私の推測では、 ':for'パラメータを完全に無視し、すべてのアクションに対して' 'application''レイアウトだけを使用していると思います。 –

+0

ああ...ありがとう、ディラン。あなたが正しいと思います。元の開発者が追加の条件付きレイアウトを指定していたので気づいていなかった。しかし、今では、これらが 'layout 'login'、:except edit>&' layout 'application'、:only =>:edit'のようにリストされているので、さらに混乱します。または 'アプリケーション'レイアウト。私がまだ発見していない他の場所に定義されたものがなければならない。 – brandonjp

答えて

9

私は上記のコメントとして、Railsはあなたを無視している:パラメータに、ちょうどすべてのアクションのための「アプリケーション」レイアウトを使用する必要があります。

複数のレイアウトをレンダリングする限り、コントローラには1つのlayout ...行しかないようです。倍数がある場合は、最後のものだけを使用します。最後のパラメータが:onlyまたは:exceptのパラメータを持つ場合は、になります。他のすべてのアクションについては、applicationのレイアウトに戻ってください。 applicationレイアウトとレンダリングのレイアウトを正しく使用していない場合は、以前の開発者がコントローラ/アプリケーションのどこかにlayout nilのようなものを入れていないことを確認してください。

あなたは、コントローラ内部の複数のレイアウトを処理したい場合は、この試みることができる:あなたが言うとき「としてうまく機能」

class UsersController < ApplicationController 
    layout :choose_layout 

    def choose_layout 
    if action_name == "edit" 
     "application" 
    else 
     "login" 
    end 
    end 
end 
+1

ここで私はまだ混乱しています...私はレイアウトを指定しないと、アプリケーションのレイアウトをレンダリングしますが、 'layout 'login'、:except =>:edit'を追加すると、のために:編集。 'layout nil'やそれに類するものが見つかりません。あなたがそのようなものを探すために考えることができるものはどこですか? – brandonjp

関連する問題