Ruby on Rails has_many通過關聯對象保存到數據庫之前,我試圖訪問ActiveRecord上的關聯對象。在Ruby on Rails項目中保存
class Purchase < ActiveRecord::Base
has_many :purchase_items, dependent: :destroy
has_many :items, through: :purchase_items
validate :item_validation
def item_ids=(ids)
ids.each do |item_id|
purchase_items.build(item_id: item_id)
end
end
private
def item_validation
items.each do |item|
## Lookup something with the item
if item.check_something
errors.add :base, "Error message"
end
end
end
end
如果我建立了我的對象,像這樣: purchase = Purchase.new(item_ids: [1, 2, 3])
,並嘗試將其保存到item_validation
方法不具備的項目集合填充呢,所以儘管項目已經設置設置它沒有得到一個有機會致電check_something
方法。
是否有可能在我的購買模型和關聯模型持續存在之前訪問商品集合,以便我可以針對它們運行驗證?
如果我改變我的item_validation
方法是:
def item_validation
purchase_items.each do |purchase_item|
item = purchase_item.item
## Lookup something with the item
if item.something
errors.add :base, "Error message"
end
end
end
它似乎工作我希望它的方式,但我覺得很難相信,有沒有辦法與直接訪問的項目集合我購買之前的導軌以及相關記錄將保存到數據庫中。