我有一个rails 4应用程序,其代码如下:
<% @store.products.each_with_index do |p, i| %>
<%= render "product_fields", locals: {product:p, index: i} %>
<% end %>
并且product_fields部分看起来像:
//LOTS OF HTML CODE HERE
<% if params[:action] == "edit" %>
<%= render "edit_product_fields", locals: {p: product, i: index } %>
<% end %>
但是得到错误(在_product_fields.html.erb上):
NameError in Products#edit
undefined local variable or method `p' for #<#<Class:0x00000101e35da8>:0x00000101a86568>
出了什么问题?另外,我想知道是否有更简洁的方法将变量传递给局部内的部分?我尝试做类似locals: {w:w}
的事情(因此变量的命名一致,但它似乎也没有用。
答案 0 :(得分:1)
在rails 3+中,您无需提供本地选项。只需直接传递变量即可。
<%= render 'product_fields', product: p, index: i %>
答案 1 :(得分:0)
您应该在渲染中添加partial
关键字,否则本地人将无效。
<%= render partial: "product_fields", locals: { product: p, index: i } %>
<%= render partial: "edit_product_fields", locals: { p: product, i: index } %>