据我所知,模型中子对象的构建/创建方法会自动创建关系。
但是,当我在父对象和子对象上都使用validates
时,我无法保存父对象,除非我在子构建/创建方法中显式传入父对象
父类
class Order < ActiveRecord::Base
attr_accessible :tax, :total
has_many :order_lines
validates :user, presence: true
validates :order_lines , presence: true
end
儿童班
class OrderLine < ActiveRecord::Base
attr_accessible :order, :product, :qty
belongs_to :order
belongs_to :product
...
...
validates :order, presence: true
end
问题
如果我尝试:
,我会收到错误order.order_lines.build(product: product)
order.save => #error for order_lines, order can't be blank
#or
order.order_lines.create(product: product) => # throws same error
但我可以成功完成以下任务:
order.order_lines.build(product: product, order: order)
order.save => #true
#or
order.order_lines.create(product: product, order: order) => #true
这导致我对FactoryGirl和创建测试的进一步问题。
我是否错误并误解您必须明确传入父对象?
Rails vs:3.2.11
答案 0 :(得分:0)
轨道中的关联应该让你的生活更轻松,而不是相反。
这样的事情怎么样?
Order has_many Lines has_one Product
这种架构对我来说更有意义。现在你可以这样做:
order.lines.product.build(attributes)