はじめに
今日はあんまり進まなかったけど、とりあえず復習として読んだところのメモだけしておく。
読んでる本はこれ。
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 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に対応したメソッドになっているので、特に難しいところはない。
にしても進捗が少なすぎるし、勉強したことをアウトプットしていくことが下手すぎる。。精進せねば。