before_save
3 つのフィールド (street、city、state) のいずれか (必ずしもすべてではない) に変更があった場合にのみ実行されるコールバックを作成したいと考えています。これどうやってやるの?ありがとう
user.rb
class User
before_save :run_test_method, :if => street_changed?
...
end
before_save
3 つのフィールド (street、city、state) のいずれか (必ずしもすべてではない) に変更があった場合にのみ実行されるコールバックを作成したいと考えています。これどうやってやるの?ありがとう
user.rb
class User
before_save :run_test_method, :if => street_changed?
...
end
オプション 1
次のようなメソッドを作成できます。
def ok_to_run_test_method?
street_changed? || something_changed? || something_else_changed?
end
そして、次を使用します。
before_save :run_test_method, :if => :ok_to_run_test_method?
:ok_to_run_test_method?
が記号であることに注意してください。タイプミスかどうかはわかりませんが、質問では実際にクラスメソッドを呼び出していますstreet_changed?
。
オプション 2
コールバックを少し近代化し、ブロック スタイルの構文を使用します。
before_save do
if street_changed? || something_changed? || something_else_changed?
# whatever you currently have in #run_test_method
end
end
を使用して1行で実行できますProc
:
class User
before_save :run_test_method, :if => Proc.new { |u| u.street_changed? || u.city_changed? || u.state_changed? }
...
end