Передать переменную в частичное, рельсы 3?

139

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

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

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

  • 0
    Привет Эллиот, я использую это на стандартных лесах. Использование внутри index.html.erb для рендеринга _show.html.erb, где show part содержит модальные. все работает нормально, за исключением того, что когда я нажимаю ссылку показа, она показывает один и тот же идентификатор, а не разные идентификаторы.
Теги:
ruby-on-rails-3

4 ответа

234
Лучший ответ

Попробуйте следующее:

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

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

  • 18
    вам нужны теги <% =%>, а не <%%>, иначе он не будет отображаться
  • 0
    Спасибо, ты конечно прав. Исправленный.
Показать ещё 1 комментарий
124

Отдать его частичной как локальной переменной

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

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

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

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

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

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
  • 14
    Не знал о параметре: spacer_template, действительно приятно. Спасибо!
  • 11
    Обратите внимание, что хеш: locals не нужен при использовании Rails 3. Хеш аргументов преобразуется в аргументы, которые передаются в частичное.
Показать ещё 2 комментария
14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

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

10

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню