業務でscopeについて少し戸惑ってしまったので、備忘録としてここにまとめておきます。
ちなみに書いている人間は、エンジニア歴1ヶ月の人間です。
間違っている点などあれば、コメントお願いいたします。
やりたかったこと
each分の変数をscopeに渡したい。
## 実際のコード
Office.rb
scope :search, lambda { |keyword|
where('name LIKE (?) OR
address LIKE (?) OR
near_station LIKE (?) OR
introduction LIKE (?) OR
company LIKE (?)',
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%")
}
offices_controller.rb
keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?)
offices_list = []
keywords.each do |keyword|
offices_list += Office.search(keyword)
コードは一部だけ抜粋していますが、このような形で実装することができました。
最終的には、上記のコードになりましたが下記のコードでも正常に動作はしました。
Office.rb
scope :search, keyword { where('name LIKE (?) OR
address LIKE (?) OR
near_station LIKE (?) OR
introduction LIKE (?) OR
company LIKE (?)',
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%")
}