en un proyecto de Ruby on Rails Estoy intentando acceder a objetos de asociación en un ActiveRecord antes de guardar todo en la base de datos.Ruby on Rails has_many a través de objetos de asociación antes de guardar
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
Si construyo mi objeto de esta manera: purchase = Purchase.new(item_ids: [1, 2, 3])
y tratar de guardarlo en el método item_validation
no tiene la colección de artículos todavía poblada, por lo que a pesar de que los artículos se han establecido establecer que no recibe una posibilidad de llamar al método check_something
en cualquiera de ellos.
¿Es posible acceder a la colección de elementos antes de que mi modelo de compra y modelos de asociación se mantengan para que pueda ejecutar las validaciones en su contra?
Si cambio mi método item_validation
ser:
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
parece que funciona de la manera que yo quiero que, sin embargo me resulta difícil de creer que no hay manera de acceder directamente a la colección de artículos con Rieles antes de mi compra y los registros asociados se guardan en la base de datos.