1

コントローラーのインスタンス変数を部分テンプレート (このインスタンス変数にちなんで名付けられた) に渡すことについて混乱しています。

http://api.rubyonrails.org/classes/ActionView/Partials.htmlのドキュメントは次のように述べています。

デフォルトでは、PartialRenderer は、テンプレートに渡されるオブジェクトのローカル名にテンプレート名を使用します。これらの例は事実上同じです。

<%= render :partial => "contract", :locals => { :contract  => @contract } %>
<%= render :partial => "contract" %>

しかし、私の場合、同じ魔法を得ることができません。

ProductsController#show :

@foo = "123456789"

次のエディションのshow.html.erbは機能します(コントローラーの@fooは、_foo.html.erbのローカル変数fooとして表示されます)。

<%= render :partial => 'foo', :locals => { :foo  => @foo } %>

しかし、次のコードはコントローラーの @foo 変数を_foo.html.erbパーシャルに渡しません。

<%= render :partial => 'foo' %>

なんでそうなの?

4

1 に答える 1

1

私の知る限り、ローカルは通常明示的にパーシャルに渡す必要があります。自動的に渡される可能性がある唯一のケースは、そのコントローラ アクションのメイン オブジェクトを渡す場合です。つまり、foos コントローラのアクションでレコード @foo を渡す場合です。

あなたの特定のケースでは、合格@productは自動的に機能するはずです。を渡したい場合は@foo、明示的に渡す必要があります。

于 2011-05-21T17:35:37.057 に答える