基本的な検索方法
-
find
DBから条件にマッチしたオブジェクトを取得する。複数のオブジェクトを取得する事が出来る。
条件にマッチするレコードが見つからない場合、ActiveRecord::RecordNotFound例外が発生する。 -
first
主キー順の最初のレコードを取り出す。
引数を与えなければ、id:1が取得される。Dog.first(3)とすれば、idが1〜3のオブジェクトが取得される。 -
find_by
与えられた条件にマッチするレコードのうち、最初のレコードのみを返す。
マッチするレコードがない場合、ActiveRecord -
select
特定のカラムのみを取り出したいときに使用する。
Dog.select(“name”)
のように使用する。
大規模なテーブルに対しての検索方法
大規模なテーブルに対して検索を行う際は、find_eachメソッドとfind_in_batchesメソッドを使用する。
find_eachメソッドとfind_in_batchesメソッドを使用すれば、メモリを圧迫しない
1回に取り出すレコード数を指定するオプション、主キーが何番目以降のレコードを取り出すかを指定するオプション等がある。
検索時に使用するオプション的なやつ
-
distinct
重複のない一意の値のみを取り出したい時に使用する。
Dog.select(“name”).distinct -
limit
.limit(5)のように使用する。この場合は、最大で5件のみという意味になる。 -
offset
.offset(30)のように使用する。この場合は、31件目のレコードから取得する事を意味する。
where句
文字列などをwhereメソッドに引数として渡す事で、where句の役割を果たす。
Dog.where(“id = ?”, params[:id])
上記のように、paramsを用いて、値を渡す事ができる。
Dog.where(“id = #{params[:id]}”)のように直接値を渡してはいけない。悪意のある人が自由に変数を渡す事ができてしまう。
“id = ?”の部分は、「id:」のようにプレースホルダで置き換える事ができる。