質問: railsのActiveRecordのメソッドですが様々あります。 ActiveRecord::FinderMethods ActiveRecord::Calculations さて、戻ってくる型ですが **ブーリアン**であったり、 **ActiveRecord::Relation(正確にはActiveRecord::Relationを継承したモデル)** であったり、 `[ モデル, モデル ... ]`といった**モデルを持つArray**であったり、 単に**モデル1つ**であったり、 `pluck`のように**モデルを持たないArray**であったり様々です。 まとめると(間違いがあるかもしれませんが) --------------------- 以下推測ですがまとめると * ブーリアンを返す -> メソッド名末尾? * ActiveRecord::Relationを返す -> SQLにも同名の命令がある * モデル単体を返す -> find, find_* * モデルの配列を返す -> find, find_* * 単に配列を返す -> pluckなど と思っているのですが、ドキュメントを見ても明確に明示されているものであったりそうでなかったりして結構キツイです。 都度、実行してみて引数に与えた内容と返ってくるものから暗記しようと思えば可能かもしれませんが... 何か覚え方やここを見ればよいといったような指標はないでしょうか?
回答: > > 何か覚え方やここを見ればよいといったような指標はないでしょうか? > > > Railsでよく分からないときはRailsガイドを見るようにしています。 気をつけないといけない点が書いていることが多いです。 ### 参考 原文: 日本語訳: 捕捉 以下それぞれの推測について、捕捉です。 ### ブーリアンを返す -> メソッド名末尾? 真偽値を返すメソッドのメソッド名の末尾に`?`をつけることは多いです。 例えばserverworksのコーディング規約で採用されています このようなメソッド名が`?`で終わるメソッドをPredicate Method(述語メソッド)と呼んだりします。 注意したいのはRubyでの真偽値の定義です。 > > Ruby では false または nil だけが偽で、それ以外は 0 や空文 字列も含め全て真です。 > > > > > ※実際true/false以外を返していた時期があります let AR::FinderMethods#exists? return singletons in all cases closes · rails/rails@565c367 ActiveRecord::Relationを返す -> SQLにも同名の命令がある SQLに同名の命令がない場合も`ActiveRecord::Relation`を返すことがあります。 Railsガイドからの引用です。 > > bind > > create_with > > distinct > > eager_load > > extending > > from > > group > > having > > includes > > joins > > limit > > lock > > none > > offset > > order > > preload > > readonly > > references > > reorder > > reverse_order > > select > > uniq > > where > > 上のメソッドは、すべてActiveRecord::Relationのインスタンスを返します。 > > > ### モデル単体を返す -> find, find_*, モデルの配列を返す -> find, find_* これについてもRailsガイドを見ると例と一緒に、単体を返す場合、複数を返す場合が載っています。 ### 単に配列を返す -> pluckなど `pluck`はパフォーマンスが必要な場合に使います。 > > selectと異なり、pluckはデータベースから受け取った結果を直接Rubyの配列に変換してくれます。そのためのActiveRecordオブジェクトを事前に構成しておく必要はありません。従って、このメソッドは大規模なクエリや使用頻度の高いクエリで使用するとパフォーマンスが向上します > > > > > > >