这个问题有点长。请耐心等一下。以下是模型order
和order item
。 order
has_one order 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
声明嵌套属性,因此在order_item
控制器中为order
声明了mass assignment
个属性。
简化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 %>
我的问题是如何使用FactoryGril为order
视图代表order
。
order_item = FactoryGirl.build(:order_item)
order = FactoryGirl.attributes_for(:order, order_item: order_item(??))
order_item_attribues: order_item
似乎不起作用(因为没有声明嵌套属性,所以并不令人惊讶)。
答案 0 :(得分:2)
您应该能够将order_item
对象直接传递到attributes_for
:
order_item = FactoryGirl.build(:order_item)
order = FactoryGirl.attributes_for(:order, order_item: order_item)
答案 1 :(得分:1)
我认为你应该有类似测试的东西:
order_item_attrs = FactoryGirl.build(:order_item)
order_attrs = FactoryGirl.attributes_for(:order, order_item_attributes: order_item_attrs)
但是接受嵌套属性到order initialize方法应该添加:
class Order < ActiveRecord::Base
accept_nested_attributes_for :order_item
end