rails, whereメソッドを使って複雑な条件で検索する

一覧表示する場合は、下のようにすれば良いだけですが、シンプルすぎて複雑なものはできません。

def index
  @samples = Sample.all
end

より、複雑なことをするためには、クエリメソッドを使います。

よく使うやつ

メソッド 概要
where 条件でフィルタリング
not 否定の条件式を表す
order 並び替え
reorder ソート式を上書き
select 列の指定
distinct 重複のないレコードを取得
limit 抽出するレコードを指定
offset 抽出を開始する数を指定。limitと一緒に使う
group 特定のキーで結果をグループ化
having GROUP BYにさらに制約をつける
joins 他のモデルと結合
includes 関連するモデルをまとめて取得
readonly 取得したオブジェクトを読み取り専用に
none 空の結果セットを取得

whereメソッドと使って自分が作ったものしか表示されないようにする

def index
  @samples = Sample.all
end

単純にallだけでは、自分だけではなくて、他のユーザーのものも表示されるので、whereメソッドを使って自分のだけを表示されるようにします。下の例は、sampleを作ったuserと現在のユーザーが同一のものだけをフィルタリングするという意味です。

def index
  @samples = Sample.where(user_id: current_user.id)
end

See Also