Render partial: collection => @array указать имя переменной
Я делаю частичное, как это:
$("#box_container").html("<%= escape_javascript( render :partial => 'contacts/contact_tile', :collection => @contacts) %>")
Проблема в том, что моя частичная часть ожидает переменную "контакт".
ActionView::Template::Error (undefined local variable or method `contact'
Я просто хочу сказать частичной, чтобы ожидать переменную contact
. Должен перебираться через @contacts
как contact
. Как это сделать?
Ответы
Ответ 1
Обнаружено, что это также полезно из документов. Вы не ограничены наличием переменной, названной после частичного:
http://guides.rubyonrails.org/layouts_and_rendering.html
Чтобы использовать имя локальной локальной переменной в частичном, укажите: как опция в вызове частичного:
<%= render :partial => "product", :collection => @products, :as => :item %>
С помощью этого изменения вы можете получить доступ к экземпляру коллекции @products в качестве локальной переменной элемента в частичном. "
Ответ 2
Документация на http://guides.rubyonrails.org/layouts_and_rendering.html гласит:
Когда частичное вызывается с множественной коллекцией, тогда отдельные экземпляры частичного имеют доступ к члену коллекция отображается через переменную, названную в честь частичного.
Так что будет передана переменная с именем "contact_tile" вместо "contact". Возможно, вы можете просто переименовать свой частичный.
Если это наименование важно, вы можете сделать это явно без опции сбора, например:
@contacts.each { |contact| render :partial => 'contacts/contact_tile', :locals => {:contact => contact } }
(хотя, как отметил комментатор, это может быть не так эффективно)
Ответ 3
Последний синтаксис:
index.html.erb
<%= render partial: "product", collection: @products %>
_product.html.erb
<p>Product Name: <%= product.name %></p>
@products
используется в частичном качестве product
Где @products можно рассматривать как Product.all
и product
можно рассматривать как строку продукта, т.е. Product.first
, как зацикливание всего продукта один за другим.