in un progetto Ruby on Rails Sto tentando di accedere agli oggetti di associazione su un ActiveRecord prima di salvare tutto nel database.Ruby on Rails has_many tramite gli oggetti di associazione prima di salvare
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
Se io costruisco il mio oggetto in questo modo: purchase = Purchase.new(item_ids: [1, 2, 3])
e cercare di salvare il metodo item_validation
non ha la collezione di oggetti ancora popolato, quindi, anche se gli elementi sono stati impostati impostarlo non ottiene un possibilità di chiamare il metodo check_something
su uno di essi.
È possibile accedere alla raccolta di articoli prima che il modello di acquisto e i modelli di associazione siano mantenuti in modo che possa eseguire convalide contro di essi?
Se cambio il mio metodo item_validation
di essere:
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
sembra funzionare il modo in cui voglio che, però trovo difficile credere che non c'è modo di accedere direttamente alla raccolta oggetti con rotaie prima del mio acquisto e dei record associati salvati nel database.