部分传递变量错误

时间:2014-05-24 22:34:23

标签: ruby-on-rails ruby partials

我有一个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}的事情(因此变量的命名一致,但它似乎也没有用。

2 个答案:

答案 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 } %>