ActiveRecordのSELECT系メソッド
はじめに
今日はあんまり進まなかったけど、とりあえず復習として読んだところのメモだけしておく。
読んでる本はこれ。
Ruby on Rails 4 アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/11
- メディア: 大型本
- この商品を含むブログ (3件) を見る
今日から5章の「モデル開発」に入ってる。
このうち、
5.1 データ取得の基本 - findメソッド
5.2 より複雑な条件での検索を行う - クエリメソッド
5.3 データ取得のためのその他のメソッド
について簡単におさらいする。
findメソッド
find(keys)
主キー列で検索する。
引数のkeys
を配列にして複数値の検索も可能。
find_by(key: value)
key
で指定した列がvalue
で指定した値に合致するレコードを1件取得する。
key
、value
のペアを複数指定するとAND検索の要領になる。
クエリメソッド
クエリメソッドはfind
やfind_by
と異なり、DBアクセスが必要になるまで遅延される。これにより、メソッドチェーンで条件を追加していくことができる。
where(exp)
exp
で指定した条件に当てはまるレコードを検索する。
条件は、具体的な値を直接指定するほか、RangeオブジェクトでSQLのBETWEEN相当の条件を指定したり、配列を使ってSQLのIN相当の指定をしたりできる。
また、文字列で条件を直接指定する方法も提供されている。この場合、プレースホルダを使った表現にすることで可読性が増し、SQLインジェクション対策にもなる。
not
where
と組み合わせることで、否定条件を表現できる。
order(key: :asc or :desc)
指定した列でソートする。ソート順が:asc
の場合は省略可。
reorder
手前でorder
によって指定されているソート順を無視して新たにソートする。
distinct
重複したレコードを除去する。
limit
最大取得レコード数を指定する。
offset
limit
と組み合わせて使用し、取得するレコードの開始レコード位置を指定する。
first
/last
先頭/末尾のレコードを取得する。
group(key)
key
で指定した列でグループ化する。
having(exp)
group
で集計した結果に対して、絞り込み条件を指定する。
where!
where
の破壊的バージョン。
unscope
これまでに指定された条件を除去する。
none
空の結果を返す。
その他のメソッド
pluck(col)
指定した列を配列として取得する。
exists?
レコードの存在を確認する。
scope
(モデルのクラス定義で使用)
よく利用する条件を、後で使えるように名前付けする。
default_scope
(モデルのクラス定義で使用)
デフォルトの条件を指定する。
count
検索結果のレコード数を取得する。
average
/minimum
/maximum
/sum
レコードの平均/最小/最大/合計を取得する。
find_by_sql
生のSQLを指定する。
まとめ
基本的に、SQLに対応したメソッドになっているので、特に難しいところはない。
にしても進捗が少なすぎるし、勉強したことをアウトプットしていくことが下手すぎる。。精進せねば。