我正在开发一个系统,在这个系统中,ActiveRecord实体和字段需要始终保持一致。通常,某些字段是从其他字段派生出来的,需要随时更新。有时,这种情况甚至可能发生在不同的实体之间。
例如:
class User < ActiveRecord::Base
attr_accessible :first_name, :last_name
attr_protected :name
# I need to keep 'name' up to date at all times
after_update do
name = self.first_name + ' ' + self.last_name
true
end
end这里的哲学问题是,我是否应该在回调或观察者内部实现这类行为(以及数百种类似的行为)。我可以想出以下两种做法的几个理由:
回调
观察员
有更多经验的人能指点我吗?
发布于 2012-09-27 18:15:49
根据Design书,这是最适合观察者模式的。使用和观察者,您的after_update/save逻辑将与模型分离。从您的示例中很难看出,但是如果您正在从回调中更新其他模型,那么您正在使用其他模型的知识来污染您的用户模型。因此,观察员应该介入来处理这个问题。
此外,您还可以在Rails中禁用观察者,从而使您的单元测试在不关心触发“回调”的情况下更快。
https://stackoverflow.com/questions/12625178
复制相似问题