0

我的理解是模型中子对象的构建/创建方法会自动创建关系。

但是,当我validates在父对象和子对象上都使用 a 时,我无法保存父对象,除非我在子构建/创建方法中显式传入父对象

家长班

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 和创建测试的更多问题。

我是否错误和误解了您必须明确传递父对象?

导轨与:3.2.11

AR API 文档

4

1 回答 1

0

rails 中的关联应该让你的生活更轻松,而不是相反。

这样的事情呢?

Order has_many Lines has_one Product

这种架构对我来说更有意义。现在你可以做这样的事情:

order.lines.product.build(attributes)
于 2013-04-02T20:28:50.943 回答