下記のURLを参考に検索機能を実装しました。
https://qiita.com/enomotodev/items/d652b7466d05cdd0e861
その後、普通に利用できていたのですが、別の実装をしばらく行い、久しぶりに検索機能を使用したところタイトルのエラーが発生しました。
特に検索機能に関わるコードを変えていないのですが発生してしまいました。
●top_controller.rb
def index if params[:q] relation = Micropost.joins(:user) @feed_items = relation.merge(User.search_by_keywords(params[:q].split(/[\p{blank}\s]+/))) .or(relation.search_by_keywords(params[:q].split(/[\p{blank}\s]+/))) else @feed_items = Micropost.all end end
top_controller.rbの下記のコードでエラーが発生しています。
.or(relation.search_by_keywords(params[:q].split(/[\p{blank}\s]+/)))
その他、関連しているmodelを掲載します。
●user.rb
scope :search_by_keywords, -> (keywords) { all.tap do |q| keywords.each {|keyword| q.where!("users.nickname LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") } end }
●micropost.rb
scope :search_by_keywords, -> (keywords) { all.tap do |q| keywords.each {|keyword| q.where!("microposts.content LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") } end }
呼び出し元と or の中の両方でrerationを使っているのですが、orderも使っていないこともあり、原因がわかりません。
参考にしたURLにも「or メソッドを使う際に気をつけなければいけないのは、呼び出し元と or メソッド内の構造が一致していないとエラーになる」と記載があるため、そのエラーにならないよう実装されていると思うのですが、、、
もし、お分かりになる方がいらっしゃいましたら教えて頂ければと思います。
あなたの回答
tips
プレビュー