Не могу передать локальный объект вложенному частичному в Rails 3 - PullRequest
2 голосов
/ 16 марта 2012

Я надеюсь, что кто-то может пролить свет на то, что, вероятно, является простой ошибкой.Я пытаюсь передать локальную переменную article, которая находится в частичном _article.html.erb, другому частичному вложенному в _article.html.erb.Когда частичный код находится в _article.html.erb, он работает нормально. Я пробовал много вариантов (в том числе: локальные), но не могу передать локальную переменную.

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

_favorite.html.erb (как избранные, так и избранные являются более или менее одинаковыми, поэтому я только опубликовал один)

 <%= 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 %>

Сообщение об ошибке:

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

1 Ответ

2 голосов
/ 16 марта 2012

Документы по rails для рендеринга упоминают использование объекта следующим образом:

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

И говорят, что:

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

Что делает его похожим на: переменная объекта переводится в имя частичного.Так что в вашем случае, в _favorite, вам придется использовать любимую переменную:

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

Лично я предпочитаю синтаксис localals, потому что тогда вы можете быть явным:

<%= render :partial => 'favorite', :locals => {:article => article} %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...