【ルビーon Rails】Modelで保存前の原値と修正状態について

1163 ワード

今日RailsのModelで問題に遭遇しました
ModelクラスからActiveRecordオブジェクトを取得し、一連の変更(保存されていません)を行った場合、どのような変更が行われたのかどうやって判断しますか?
(ModelをOption、関連パラメータをcorrectとする)
私が本来取った方法は、データテーブルにoriを追加することです.correctパラメータは、オブジェクトが保存されるたびにcorrectと同期し、correctフィールドが変更されたかどうかを判断します.
しかし、このような欠点も明らかです.もしパラメータの数が多ければ、それぞれに相応のori_が必要ではないでしょうか.フィールド?このようにすると、それぞれ2つのフィールドが必要で、想像も合理的ではないと感じて、Railsはこのような問題に対して良い解決策があるべきだと感じています.実際には、StackOverFlowでこのような使い方を見ました.
Check out ActiveModel::Dirty (available on all models by default). The documentation is really good, but it lets you do things such as:
1 @user.street1_changed? # => true/false

つまり、該当するフィールドの後に_を追加します.changed?,これで問題は直接解決し,親測は有効である.
 
しかしすぐにもう一つの問題が来て、変わったかどうかを知った以上、元の値が何なのかどうかをどうやって知るのだろうか.
同じようにStackOverFlowで解決策を見つけました
Appending _was to your attribute will give you the previous value.
同様に、親測定は有効です.
 
以上、二つの問題は完璧に解決された.
(詳細についてはActiveModel::Dirtyがサポートする様々な不思議な機能については、http://api.rubyonrails.org/にActiveModel::Dirtyと入力します.