местные жители в рельсах частично

У меня есть это частичное:

<% if flash.any? %>
  <% flash.each do |type, message| %>
    <%= render 'shared/flash_message', locals: { type: type, message: message } %>
  <% end %>
<% end %>

который включает в себя этот частичный:

<div class="message-box message-box--<%= type %>">
  <a class="close" data-dismiss="alert">×</a>
  <%= message %>
</div>

При запуске я получаю:

неопределенная локальная переменная или тип метода для

<#:0x007fe510aa3c80>

Это указывает на ошибку, когда я вывожу ‹%= type %> Кто-нибудь знает, почему?


person rctneil    schedule 20.04.2014    source источник
comment
Мне нужно, чтобы тип был частью имени класса. Не довольствоваться внутри div. Тем не менее, перемещение вывода type внутри div просто для того, чтобы посмотреть, работает ли он там, тоже не работает.   -  person rctneil    schedule 20.04.2014


Ответы (3)


Вы должны указать, что вы визуализируете партиал, чтобы передать локальные переменные.

Так изменить

<%= render 'shared/flash_message', locals: { type: type, message: message } %>

to

<%= render partial: 'shared/flash_message', locals: { type: type, message: message } %>.

http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

person Sterling Graham    schedule 20.04.2014

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

<% if flash.any? %>
 <% flash.each do |type, message| %>
 <%= render :partial=>'shared/flash_message', locals: { type: type, message: message } %>
 <% end %>
<% end %>
person Dave    schedule 20.04.2014

На самом деле вы можете сделать частичный рендеринг без использования :partial, если вы не передаете никаких других параметров. т. е. следует отметить, что при передаче дополнительных параметров, таких как :layout, :locals и т. д., требуется явное указание :partial. Таким образом, должно быть,

<% if flash.any? %>
  <% flash.each do |type, message| %>
    <%= render partial: "shared/flash_message", locals: { type: type, message: message } %>
  <% end %>
<% end %>

Ссылка: Использование фрагментов

person Rajesh Omanakuttan    schedule 20.04.2014