0
這是我的理解是模型中的子對象的構建/創建方法會自動創建關係。ActiveRecord構建或創建需要傳遞父對象作爲參數的方法
不過,雖然我對兩者都使用validates
父和子對象,我無法保存父對象,除非我明確地傳遞在孩子構建父對象/ create方法
父類
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
感謝dr4ke,但是這並沒有解決我是否不應該不必使用create/build方法傳遞父對象。此外,您的建議會打破訂單行只能有一個產品關聯的域邏輯。 – pghtech
抱歉,錯字。你這樣做,你的模型協會應該適當地構建,相應地驗證並且容易地測試。也許我錯過了這一點? – jbearden