в проекте Ruby on Rails Я пытаюсь получить доступ к объектам ассоциации в ActiveRecord до сохранения всего в базу данных.
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
кажется, что это работает так, как я хочу, однако мне трудно поверить, что нет никакого способа получить прямой доступ к коллекции предметов с помощью рельсов до моей покупки и связанных с ней записей, сохраненных в базе данных.