3

我有这个部分:

<% 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 %> 的错误有人知道为什么吗?

4

3 回答 3

3

您必须指定要渲染局部变量以传递局部变量。

所以改变

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

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

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

于 2014-04-20T10:28:06.497 回答
0

尝试这个:

<% if flash.any? %>
 <% flash.each do |type, message| %>
 <%= render :partial=>'shared/flash_message', locals: { type: type, message: message } %>
 <% end %>
<% end %>
于 2014-04-20T10:31:14.990 回答
0

:partial实际上,如果您没有传递任何其他选项,您可以不使用渲染部分。即,要注意的一点是,:partial在传递其他选项时需要明确指定:layout,例如:locals等。所以,它应该是,

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

参考:使用部分

于 2014-04-20T10:41:30.140 回答