他のモデルに加えられた変更を記録するモデルを作成しているので、すべての属性の変更が記録されます。変更レコードテーブルを構造化するための最良の方法に関する入力を探しています。
たとえばUser、属性を持つモデルがありnameます。Changeそのユーザーの名前がからBobに変更されたときに、レコードをデータベースに保存したいと思いますTed。
さらに、ユーザーUserが同時に複数の属性を更新する場合、これらを単一として記録したいと思いChangeます。たとえば、を変更すると、と属性Userの両方がそれぞれからとに変更されます。nameemailBobbob@bobsdomain.comTedted@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を使用しています。