Rails 4通过渲染部分传递多个变量

时间:2014-11-19 15:45:27

标签: ruby-on-rails ruby

这个问题已被多次询问,但我无法让它发挥作用。

我想将多个变量传递给我这样的部分......

<%= f.fields_for :materials do |builder| %>
  <%= render partial: 'material_fields', locals: {f: builder, feed: true} %>
<% end %>

这是来自partial_fields.html.erb的一行,我希望f.select预先填充Yes选项或“true”值。 (有些情况我希望它是假的)

<%=f.select :is_feed, options_for_select([['Yes', true], ['No', false]], feed )%>

f可用,feed不是.....我不知道为什么这不起作用。 我试过&lt;%= feed%&gt;在select语句之外,它仍然不起作用。

在这两种情况下,我都得到未定义的局部变量或方法`feed'

有人知道我的语法有什么问题吗?

2 个答案:

答案 0 :(得分:5)

我弄清楚问题是什么。

我有

<%= f.fields_for :materials do |builder| %>
  <%= render partial: 'material_fields', locals: {f: builder, feed: true } %>
<% end %>

以后我在同一视图中

<%= f.fields_for :materials do |builder| %>
    <%= render 'material_fields', f: builder %>
<% end %>

显然,当从一个文件渲染相同的部分两次时,参数被搞砸了。进一步的测试可以隔离问题,但我没有精力或时间。

解决方案:在两个渲染上声明相同的参数。值可以不同,它们按预期工作。

<%= f.fields_for :materials do |builder| %>
    <%= render partial: 'material_fields', locals: {f: builder, feed: true } %>
<% end %>

<%= f.fields_for :materials do |builder| %>
  <%= render partial: 'material_fields', locals: {f: builder, feed: false } %>
<% end %>

答案 1 :(得分:1)

我们不清楚你要做什么。

如果这是在一个视图页面中,我认为这是因为erb标记,那么你通常会渲染一个局部变量,其中需要在locals哈希中传递局部变量:< / p>

<%= render partial: 'material_fields', locals: {:f => builder, :feed => true} %>

http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials