他のモデルに加えられた変更を記録するモデルを作成しているので、すべての属性の変更が記録されます。変更レコードテーブルを構造化するための最良の方法に関する入力を探しています。
たとえばUser
、属性を持つモデルがありname
ます。Change
そのユーザーの名前がからBob
に変更されたときに、レコードをデータベースに保存したいと思いますTed
。
さらに、ユーザーUser
が同時に複数の属性を更新する場合、これらを単一として記録したいと思いChange
ます。たとえば、を変更すると、と属性User
の両方がそれぞれからとに変更されます。name
email
Bob
bob@bobsdomain.com
Ted
ted@teddy.com
変更される特定のオブジェクトの属性のセットは任意です。テーブルをどのように構成しますか?
現在、私は次のようなことをしています(簡略化):
Changes:
user_id:integer
changed_fields:string
old_values:text
new_values:text
上記の例では、これらのレコードは次のようになります。
:changed_fields => "name",
:old_values => "Bob",
:new_values => "Ted"
と
:changed_fields => "name,email",
:old_values => "Bob,bob@bobsdomain.com",
:new_values => "Ted,ted@teddy.com"
モデルには、Change
特定のフォーマットにマップするために入力/出力を解析する特別なゲッター/セッターメソッドがあります。
この種のものをモデル化するためのより良い方法はありますか?
そうでない場合、値が任意である可能性がある場合、入力/出力の解析を最適に機能させるためにデータベースの値をフォーマットするための最良の方法は何ですか。
DBとしてPostgresを使用し、ORMとしてActiveRecordを使用しています。