这个问题已被多次询问,但我无法让它发挥作用。
我想将多个变量传递给我这样的部分......
<%= 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'。
有人知道我的语法有什么问题吗?
答案 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