この:if
オプションはファイルでチェックされていますactivesupport\lib\active_support\callbacks.rb
。
このメソッドshould_run_callback
は、コールバックを実行する必要があるかどうかを確認するために呼び出されます。
run_callbacks
同じファイル内のメソッドから始めて、コールバックチェーンがどのように処理されるかも見てください。
そのファイルのv2.3.8からのいくつかのコードは次のとおりです。
def should_run_callback?(*args)
[options[:if]].flatten.compact.all? { |a| evaluate_method(a, *args) } &&
![options[:unless]].flatten.compact.any? { |a| evaluate_method(a, *args) }
end
そして、これが私が見つけた方法です(誰かが興味を持っている場合に備えて):
- Railsv2.3.8をgithubからダウンロードして解凍しました。
- すべての.rb
:if
ファイルでgrepp'ed
- に、次
activerecord/CHANGELOG
のようなコメントがあり
ます。ブロックまたはメソッドポインタを使用して検証を実行するかどうかを決定できるすべての検証に:ifオプションを追加しました。#1324 [Duane Johnson/jhosteny]。
- グーグルはそのコメントを求めた。グーグルキャッシュでそれを見つけました。
- コメント/追加が05/21/0510:57:18にdavidによって行われたことがわかりました
- 546ページのrailsgithub履歴に日付2005-05-21があります:
:if
作品がどのように機能するかについての知識を得ました
- commitが参照するコードがv2.3.8に存在しなくなったことがわかりました。そのコードの最新の場所を見つける必要がありました
- もう一度grepp
:if
して、「良い」と感じた各ファイルを調べました。に来たactivesupport/lib/active_support/callbacks.rb
- ファイルで検索し
:if
ましたが、メソッド内の1つの場所でのみ見つかりましたshould_run_callback
。
- 投稿された回答
- 指を交差させ、賞金を待ちました。:D
それは楽しかった!