Грешка на променлива при частично преминаване

Имам приложение 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} (така че ще има последователно именуване на променливите, но изглежда също не работи.


person the_    schedule 24.05.2014    source източник
comment
Можете ли да публикувате пълната грешка и вашата пълна product_fields частична?   -  person Joe Kennedy    schedule 25.05.2014
comment
@JKen13579, Разбира се, току-що публикувах   -  person the_    schedule 25.05.2014


Отговори (2)


В rails 3+ не е необходимо да предоставяте опция за местни потребители. Просто предайте променливите директно.

<%= render 'product_fields', product: p, index: i %>
person mnelson    schedule 25.05.2014

Трябва да добавите ключова дума partial във вашия рендер, в противен случай локалните няма да работят.

<%= render partial: "product_fields", locals: { product: p, index: i } %>

<%= render partial: "edit_product_fields", locals: { p: product, i: index } %>
person Sibevin Wang    schedule 25.05.2014
comment
Благодаря за отговора, но това не променя грешката? - person the_; 25.05.2014