Railsでscopeを使って検索条件をメソッド化する

コントローラーで長々と検索条件を書くと読みづらいので、scopeを使って、検索条件をメソッド化してスッキリ書いてみます。

下記は、boardテーブルから、followしているuserを指定してレコードを取得する場合の書き方です。

@boards = Board.joins(:follows).where('follows.user_id = ?', user.id)

これをscopeを使ってスッキリ書いてみましょう。

Scopeを使ってスッキリ書く
Boardモデルに下記のようにscopeを定義します。

scope :followed_boards, -> user {
  joins(:follows).where('follows.user_id = ?', user.id)
}

すると、先程の検索条件は、下記のようにシンプルに書くことができるようになります。

@boards = Board.followed_boards(user)

コードが読みやすくなっただけでなく、他でも使いまわしやすくなりました。

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする