Ruby on Railsプロジェクトすべてをデータベースに保存する前に、ActiveRecordの関連オブジェクトにアクセスしようとしています。Ruby on Railsで保存する前に関連オブジェクトをhas_manyで保存する
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
メソッドを呼び出すチャンス。
購入モデルと関連モデルが永続化される前にアイテムコレクションにアクセスして、そのモデルに対して検証を実行できますか?
私がそれをしたいように動作するように思わ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
、しかし私はそれが難しい直接でのアイテムのコレクションにアクセスする方法がないことを信じることを見つける:
私はあることを私のitem_validation
方法を変更した場合購入前のレールと関連レコードがデータベースに保存されます。