Jer*_*ryA 6 ruby ruby-on-rails
这个问题已被多次询问,但我无法让它发挥作用.
我想把多个变量传递给我这样的部分...
<%= f.fields_for :materials do |builder| %>
<%= render partial: 'material_fields', locals: {f: builder, feed: true} %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这里是部分material_fields.html.erb的一行,我希望f.select预先填充Yes选项或"true"值.(有些情况我希望它是假的)
<%=f.select :is_feed, options_for_select([['Yes', true], ['No', false]], feed )%>
Run Code Online (Sandbox Code Playgroud)
f是可用的,而feed不是.....我不知道为什么这不起作用.我已经在select语句之外尝试了<%= feed%>但它仍然不起作用.
在这两种情况下,我得到未定义的局部变量或方法`feed'.
有人知道我的语法有什么问题吗?
我弄清楚问题是什么.
我有
<%= f.fields_for :materials do |builder| %>
<%= render partial: 'material_fields', locals: {f: builder, feed: true } %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
后来我也有同样的观点
<%= f.fields_for :materials do |builder| %>
<%= render 'material_fields', f: builder %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
显然,当从一个文件渲染相同的部分两次时,参数被搞砸了.进一步的测试可以隔离问题,但我没有精力或时间.
解决方案:在两个渲染上声明相同的参数.值可以不同,它们按预期工作.
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)