如何根据关联对象是否已被添加或删除来执行操作?
我的系统中的每个用户都有一个外部服务的配置文件。配置文件跟踪用户的一些字段。当在我的系统上更新这些字段中的一个或多个时,我将调用服务来更新配置文件。这个电话很贵,所以我只想在必要的时候打。
每个用户都可以有一个宠物,表示为用户中的一个字段。用户的服务配置文件具有一个标志,表示用户是否有宠物。
class User < ActiveRecord::Base
attr_accessible :name, :shoe_size
attr_accessible :unimportant_field1, :unimportant_field2
has_one :pet
end
class Pet < ActiveRecord::Base
belongs_to :user
end
class UserObserver < ActiveRecord::Observer
observe User
def after_create(user)
Service.post_user(user)
end
def after_update(user)
if changed(user)
Service.put_user(user)
end
end
def changed(user)
user.name_changed? || user.shoe_size_changed? || user.pet_changed?
# But there is no pet_changed? method!
end
end用户可能会获得这样的宠物:
user.build_pet
# or
user.pet = Pet.new
user.save!或者像这样:
pet = Pet.create :user => user问题:
user.pet_changed?方法;ActiveRecord::Dirty不跟踪关联。我在找一个很好的模式。也许我得自己发明。
发布于 2013-02-08 04:56:22
不要使用user.pet_changed?,而是使用user.pet.changed?。
https://stackoverflow.com/questions/14764489
复制相似问题