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
यह तरह से मैं यह करना चाहते हैं काम करने के लिए लगता है, लेकिन मैं इस पर विश्वास करना मुश्किल सीधे के साथ आइटम संग्रह तक पहुँचने के लिए कोई रास्ता नहीं है कि वहाँ लगता है मेरी खरीद से पहले रेल और संबंधित रिकॉर्ड डेटाबेस में सहेजे जा रहे हैं।