如何为 has_one 与自动保存关联编写 FactoryGirl:true?
How to write FactoryGirl for has_one association with autosave: true?
问题有点长。请稍等片刻。这是模型 order
和 order item
。 Aorder
has_oneorder item
.
class Order < ActiveRecord::Base
has_one :order_item, autosave: true, dependent: :destroy, validate: true
validates_associated :order_item
end
class OrderItem < ActiveRecord::Base
belongs_to :order
#validations
end
由于没有为 order_item
声明嵌套属性,因此没有在 mass assignment
的 order
控制器中声明 order_item
的属性。
简化的order
视图
<%=simple_form_for @order do |f| %>
<%=f.input :order_date %>
<%=render :inline 'order_item', locals: {f: f} %>
<% end %>
局部视图_order_items.html.erb
<%=simple_fields_for :order_item do |f| %>
<%=f.input :prod_name %>
<% end %>
我的问题是,对于上面的 order
视图,如何用 FactoryGril 表示 order
。
order_item = FactoryGirl.build(:order_item)
order = FactoryGirl.attributes_for(:order, order_item: order_item(??))
order_item_attribues: order_item
似乎不起作用(这并不奇怪,因为没有声明嵌套属性)。
您应该能够将 order_item
对象直接传递到 attributes_for
:
order_item = FactoryGirl.build(:order_item)
order = FactoryGirl.attributes_for(:order, order_item: order_item)
我认为你应该在测试中有类似的东西:
order_item_attrs = FactoryGirl.build(:order_item)
order_attrs = FactoryGirl.attributes_for(:order, order_item_attributes: order_item_attrs)
但要接受订单初始化方法的嵌套属性,应添加:
class Order < ActiveRecord::Base
accept_nested_attributes_for :order_item
end
问题有点长。请稍等片刻。这是模型 order
和 order item
。 Aorder
has_oneorder item
.
class Order < ActiveRecord::Base
has_one :order_item, autosave: true, dependent: :destroy, validate: true
validates_associated :order_item
end
class OrderItem < ActiveRecord::Base
belongs_to :order
#validations
end
由于没有为 order_item
声明嵌套属性,因此没有在 mass assignment
的 order
控制器中声明 order_item
的属性。
简化的order
视图
<%=simple_form_for @order do |f| %>
<%=f.input :order_date %>
<%=render :inline 'order_item', locals: {f: f} %>
<% end %>
局部视图_order_items.html.erb
<%=simple_fields_for :order_item do |f| %>
<%=f.input :prod_name %>
<% end %>
我的问题是,对于上面的 order
视图,如何用 FactoryGril 表示 order
。
order_item = FactoryGirl.build(:order_item)
order = FactoryGirl.attributes_for(:order, order_item: order_item(??))
order_item_attribues: order_item
似乎不起作用(这并不奇怪,因为没有声明嵌套属性)。
您应该能够将 order_item
对象直接传递到 attributes_for
:
order_item = FactoryGirl.build(:order_item)
order = FactoryGirl.attributes_for(:order, order_item: order_item)
我认为你应该在测试中有类似的东西:
order_item_attrs = FactoryGirl.build(:order_item)
order_attrs = FactoryGirl.attributes_for(:order, order_item_attributes: order_item_attrs)
但要接受订单初始化方法的嵌套属性,应添加:
class Order < ActiveRecord::Base
accept_nested_attributes_for :order_item
end