Передайте переменную в партиал, 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доступная в партиале.


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переменной.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.