2012-03-16 7 views
2

誰かがおそらく単純な間違いであることを明らかにすることを望んでいるIm。ローカル変数_article.html.erbにあるarticleを、_article.html.erb内にネストされた別の部分に渡そうとしています。部分コードが_article.html.erbにあるとき、それはうまく動作します。私は多くのバリエーション(ローカル変数を含む)を試しましたが、ローカル変数を渡すことはできません。Rails 3でローカルオブジェクトをネストされた部分に渡す

<%= form_for current_user.favorites.find_by_article_id(article), :html => { :method => :delete, :class => 'unfavorite_form', }, :remote => true do |f| %> 
      <div><%= f.hidden_field :article_id %></div> 
      <%= image_submit_tag("vote-favorite-on.png", :alt => "Favorite", :id => "favorites_button", :title => "Remove from favorites") %> 
<% end %> 

エラー

_article.html.erb

<% if current_user.favorited?(article) %>  
      <%= render :partial => 'unfavorite', :object => article %> 
<% else %> 
      <%= render :partial => 'favorite', :object => article %> 
<% end %> 

_favorite.html.erb(好きなとお気に入りから削除両方が多かれ少なかれ同じですので、私は一つだけを掲載しました)メッセージは次のとおりです。renderingため

 undefined local variable or method `article' for #<#<Class:0x491c2b0>:0x6727a58> 

答えて

2

レールのドキュメントは次のようにオブジェクトの使用に言及:

<%= render :partial => "customer", :object => @new_customer %> 

そして、それを言う:変数は、部分の名前に翻訳されているオブジェクト:それはのように思われてしまう

Within the customer partial, the customer variable will refer to @new_customer from the parent view. 

を。だからあなたの場合には、_favoriteでは、あなたが好きな変数を使用する必要があるだろう。しかし働い

<%= render :partial => 'favorite', :locals => {:article => article} %> 
+0

おかげで、:あなたは明示的にできるため

<%= form_for current_user.favorites.find_by_article_id(favorite), :html => { :method => :delete, :class => 'unfavorite_form', }, :remote => true do |f| %> 

は個人的に私は、地元の人々の構文を好みます私は肯定的でした。投稿する前に試しました。 –

+0

はい、そうです;) – pschuegr

関連する問題