2015-02-22 2 views
0

Во вложенной форме целью является отображение значения соответствующей записи таблицы. Но следующий сбойПросмотр связанной стоимости в вложенной форме

<%= f.fields_for :product_units do |g| %> 
     <%= g.label :product_unit, unit.name %> 

в undefined local variable or method 'unit' Что такое правильный синтаксис?

ответ

0

Чтобы использовать вложенные поля_for (f.fields_for), ваш объект модели должен быть настроен правильно, что вы здесь не указали.

Например: Если отношение было @product и многие @product_units:

product.rb:

class Product < ActiveRecord::Base 
    has_many :product_units, dependent: :destroy 
    has_many :units, through: :product_units 
    accepts_nested_attributes_for :units #if you want to update it 
end 

product_unit.rb:

class ProductUnit < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :unit 
end 

unit.rb:

class Unit < ActiveRecord::Base 
    has_many :products, through: :product_units 
    has_many :product_units, dependent: :destroy 
end 

Тогда ваше n Заинтересованное форма может выглядеть следующим образом (если это has_one использование единственного числа f.field_for:

<%= form_for @product do |f| %> 
    <%= f.fields_for :product_units do |g| %> 
    <%= g.fields_for :units do |u| %> 
     <%= u.label :name, "Product Unit Name:" %> 
     <%= u.text_field :name %> #if you want a text_field to edit it 
    <% end %> 
    <% end %> 
<% end %> 

Кроме того, если блок не существует в этой форме, возможно, придется добавить логику в контроллере, чтобы построить его, прежде чем иметь его дисплей здесь.

Альтернативно, если для каждой ассоциации существует @product.unit, вы можете просто вызвать это в представлении, если вам нужно отобразить метку единицы и не иметь ее редактируемой.

Общий комментарий:

При проводке ошибки пожалуйста, напишите детали класса вашего сообщения об ошибке, так как undefined method 'unit'for #<ActionView::Helpers::FormBuilder> фактически сильно отличается от undefined method 'unit'for nil:NilClass Эта последняя часть сообщение обычно более важно при отладке, поскольку оно сообщает вам информацию об объекте, с которым вы работаете.

+0

Да, это ошибка formBuilder 'для # ' Модель была определена 'has_many: product_units, depend:: destroy has_many: units, через:: product_units' , ProductUnit также 'принадлежит_to: product принадлежит_to: unit' Настройка работает, так как я могу изменить значения в базе данных. Только ошибка метки с ошибкой formBuilder; соответствующее значение 'unit.name' предназначено только для отображения ... – Jerome

+0

Я обновил свой ответ для вас. В вашем исходном вопросе нет никаких указаний на то, что '' 'unit''' определен так естественным'''unit.name''' не будет работать. В зависимости от исходной переменной экземпляра вы можете просто вызвать '' '@product.unit.name, если только @ product.unit.blank? '' ', Если вы просто хотите показать ассоциацию, если она существует. – Kelseydh

Смежные вопросы