在嵌套表单中,目标是显示相关表记录的值。但以下失败
<%= f.fields_for :product_units do |g| %>
<%= g.label :product_unit, unit.name %>
as undefined local variable or method 'unit'
正确的语法是什么?
答案 0 :(得分:0)
要使用嵌套的fields_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
然后您的嵌套表单可能如下所示(如果它是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
这个消息的后半部分通常在调试时更重要,因为它会告诉您有关该对象的信息与...合作。