0

同じフィールドを持つ 2 つのモデルがありますが、これが最適な DB 設計ではないことはわかっていますが、このようにセットアップされており、しばらくの間ここに存在しています。


モデル:UserおよびStakeholder

共通属性:first_nameおよびlast_name

関係: Stakeholderbelongs_to User、およびUser has_many :stakeholders


そのため、同様の属性をlisten持つユーザー モデルと利害関係者モデルの変更に注目しています。first_namelast_name

私が見たいくつかのこと:

=> after_save
=> Observer class
4

2 に答える 2

1

オブザーバーは 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

于 2013-07-22T09:33:38.467 に答える
0

はい。ユーザーおよび利害関係者モデルの変更をリッスンする after_save フックを実装できます。

ユーザーと利害関係者の間の関係を維持しているため、特定の利害関係者レコードのユーザー テーブルから first_name と last_name を取得できます。保存したいフィールド first_name と last_name の同じ値を2回保持しているのはなぜですか?

于 2013-07-22T09:33:12.747 に答える