【发布时间】:2012-04-01 11:27:56
【问题描述】:
在 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
它似乎按照我想要的方式工作,但是我很难相信在我购买之前没有办法直接使用 rails 访问项目集合,并且相关记录被保存到数据库中。
【问题讨论】:
标签: ruby-on-rails ruby has-many-through