【Rails】where like検索の使い方メモ

今回やりたかったことはjoin先のテーブルからLIKE検索したかった。今回使うモデルは2つで以下の形。

class Category < ApplicationRecord
  has_many :movies
end

class Movie < ApplicationRecord
  belongs_to :category
end

こんな感じでできた

Movie.joins(:category).where("categories.name like ?", "%キーワード%").each do |movie|
  puts movie.category.inspect
end

joinsの部分はやりたいことによるけど、left_joins、eager_loadでもできる。この辺りのどれを使うのが最適かはもう少し勉強中。で、何にはまったかというと。以下みたいに条件渡すところを「{ テーブル名: {カラム名: '値'} }」とハッシュ形式としてできないものかとずっといろいろ探してしまった。

Movie.joins(:category).where({categories: {name: 'キーワード'} })

結果、この書き方でlike検索はできないらしい。。gem使うとできるとかできないとか。とりあえず覚えて置く。以上です。