Передайте переменную в партиал, rails 3?

140

У меня такой цикл:

<% @posts.each do |post| %>
  <% render middle %>
<% end %>

Затем в моей средней части, как мне получить доступ к текущему сообщению?

Эллиот
источник
Привет, Эллиот, я использую это на стандартных строительных лесах. Использование внутри index.html.erb для рендеринга _show.html.erb, где партиал показа содержит модальный. все работает нормально, за исключением того, что когда я нажимаю ссылку "Показать", отображается один и тот же идентификатор, а не разные идентификаторы.
ученик

Ответы:

237

Попробуй это:

<% @posts.each do |post| %>
  <%= render 'middle', :post => post %>
<% end %>

Таким образом, у вас будет локальная переменная, postдоступная в партиале.

Polarblau
источник
18
вам нужны теги <% =%>, а не <%%>, иначе он не будет отображаться
Райан
4
Имейте в виду, вам понадобятся <%= render 'middle', :post => post %>rails
3.1.x
124

Передайте его партиалу как локальную переменную

<%= render :partial => 'middle', :locals => { :post => post } %>

Конечно, в rails также есть ярлык для рендеринга коллекций:

<%= render :partial => 'post', :collection => @posts %>

В этом случае он будет вызывать частичное сообщение для каждого сообщения с локальной переменной post

Вы даже можете отобразить шаблон разделителя между каждым постом:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
Стефан Колман
источник
14
Не знал о параметре: spacer_template, очень хорошо. Благодарность!
Claudio Acciaresi
11
Обратите внимание, что хеш: locals не нужен при использовании Rails 3. Хеш аргументов преобразуется в аргументы, которые передаются в партиал.
superluminary
4
Мне все еще нужно: хеш местных жителей, чтобы он работал .. Я использую 3.2.12
mck
1
<%= render :partial => 'post', :collection => @posts, as: :post %>будет автоматически перебирать каждый postв вашем партиале, поэтому вы можете использовать его postв партиале в качестве переменной.
ahnbizcad
14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

Теперь вы можете получить доступ к записи как к локальной переменной postв частичном

Феликс Андерсен
источник
10

Заменить <%= render middle %>на <%= render middle, :post => post %>. Затем в middleпартиале вы можете получить доступ к postпеременной.

sevenseacat
источник