こんにちは!kossyです!
さて、今回はActiveRecordのfindとArrayのfindがどのようにして挙動を切り替えているか、
気になったので調べてみました。
ブロックの有無で分岐していた
# activerecord/lib/active_record/relation/finder_methods.rb def find(*args) return super if block_given? find_with_ids(*args) end
もしブロックが渡されていれば、Arrayクラスのfindを使い、そうでなければActiveRecordのfindを呼び出しているようです。
なので、
User.find(params[:id])
は、ブロックが渡されている訳ではないのでActiveRecordのfindメソッドが実行され、
User.all.find { |user| user.created_at == Date.today }
は、ブロック引数 {} が渡されているので、Arrayのfindメソッドが実行されるというわけですね。
コード規約を定める場合は、Arrayのfindメソッドのエイリアスである「detect」を使うようにする、
という取り決めをしてもいいかもしれませんね。
勉強になりました。