Подтвердить что ты не робот

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. Как это сделать?

4b9b3361

Ответ 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, как зацикливание всего продукта один за другим.