Ruby on Railsには、プロパティの変更をモデル化する機能を追加します
-
19-09-2019 - |
質問
私のレールのモデルでは、私はemployer_wcbと呼ばれる小数性質を持っています。 employer_wcbが変更されたときに、ダーティビットがtrueに設定された、場合、私はそれをしたいと思います。私はemployer_wcbセッターメソッドをオーバーライドしたいと思います。これを行うにはどのような方法(特にメタプログラミングを使用して)?
解決
だから、実際には、Railsのバージョン2.1のように、これはRailsのに焼いてきました。 ドキュメント::ダーティのを見てみましょう。要約:
# Create a new Thing model instance;
# Dirty bit should be unset...
t = Thing.new
t.changed? # => false
t.employer_wcb_changed? # => false
# Now set the attribute and note the dirty bits.
t.employer_wcb = 0.525
t.changed? # => true
t.employer_wcb_changed? # => true
t.id_changed? # => false
# The dirty bit goes away when you save changes.
t.save
t.changed? # => false
t.employer_wcb_changed? # => false
他のヒント
あなたはダーティ・ビット機能に建てられたレールのを使用しない場合(上記のスティーブのエントリの私のコメントを参照)エイリアスメソッドを使用することはできません(あなたが他の理由でオーバーライドしたいと言います)。ただし、それを動作させるために、スーパーへの呼び出しを使用することができます。
def employer_wcb=(val)
# Set the dirty bit to true
dirty = true
super val
end
このだけで正常に動作します。
所属していません StackOverflow