[英]Observing object and associated object
如何根據已添加或刪除關聯對象執行操作?
我系統中的每個用戶在外部服務上都有一個配置文件。 該配置文件跟蹤用戶的某些字段。 當我的系統上更新了這些字段中的一個或多個時,我會致電服務以更新配置文件。 通話費用昂貴,因此我只想在必要時撥打。
每個用戶可以擁有一只寵物,在用戶中表示為字段。 用戶的服務配置文件具有表示用戶是否有寵物的標志。
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
不跟蹤關聯。 我正在尋找一個好的模式。 也許我必須自己發明它。
而不是使用user.pet_changed?
,使用user.pet.changed?
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.