我们有两个具有相同字段的模型我知道它不是最好的数据库设计但是它已经按照这种方式进行设置而且它是'&#39 39;在这里待了一段时间。
模特:User
和Stakeholder
常见属性:first_name
和last_name
关系:Stakeholder
belongs_to User
和User has_many :stakeholders
因此,我希望listen
关于具有类似属性first_name
和last_name
我看过几件事:
=> after_save
=> Observer class
答案 0 :(得分:1)
Observers have been removed in rails 4。
知道这一点,你不应该使用观察者设计任何新东西。
因此,after_save
回调似乎是最佳解决方案。
但是,如果您有这种可能性,我建议您进行重构,以避免重复数据。
删除first_name
模型中的last_name
和Stakeholder
字段。
并将这些值委托给用户。
class Stakeholder < ActiveRecord::Base
delegate :first_name, to: :user
delegate :last_name, to: :user
end
这样,您可以执行Stakeholder.new.first_name
,这将在用户关系中使用first_name
方法。
您可以采用相同的方式委派=
方法。
class Stakeholder < ActiveRecord::Base
delegate :first_name=, to: :user
delegate :last_name=, to: :user
end
执行Stakeholder.new.first_name = 'John'
将更改用户模型中的值
但它不适用于update_attributes
。
答案 1 :(得分:0)
是。您可以实现after_save挂钩来监听User和Stakeholder模型中的任何更改。
由于您维护了User和Stakeholder之间的关系,您可以从User表中检索特定利益相关者记录的first_name和last_name。为什么要将它们保留两倍于要存储的字段first_name和last_name的相同值?