railsチュートリアルの拡張機能として下記を参考に検索機能を実装しました。
https://qiita.com/enomotodev/items/d652b7466d05cdd0e861
これにて、micropostsのcontentとusersのnicknameどちらでも検索可能となりました。
しかし、「りんご、みかん」というような複数ワードが入力されて検索した場合に対応できていません。
and検索で実装したいと考えています。
現在のmodelsとcontorollerのコードはそれぞれ以下となります。
controller
def show if logged_in? @micropost = current_user.microposts.build if params[:q] relation = Micropost.joins(:user) @feed_items = relation.merge(User.search_by_keyword(params[:q].split(/[\p{blank}\s]+/))) .or(relation.search_by_keyword(params[:q].split(/[\p{blank}\s]+/))) .paginate(page: params[:page]) else @feed_items = current_user.feed.paginate(page: params[:page]) end end end
models/micropost.rb
class
1 belongs_to :user 2 default_scope -> { order(created_at: :desc) } 3 scope :search_by_keyword, -> (keyword) { 4 where("microposts.content LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") if keyword.present? 5 }
models/user.rb
class
1 has_many :microposts, dependent: :destroy 2 scope :search_by_keyword, -> (keyword) { 3 where("users.nickname LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") if keyword.present? 4 }
この状態ですと、以下のエラーが発生します。
undefined method `gsub' for ["りんご", "みかん"]:Array
modelsを修正しないといけないと思うのですが、どのように修正したら良いか分かりません。
もし、お分かりになる方がいらっしゃいましたら教えて頂ければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/25 12:24
2018/07/26 02:48 編集
2018/07/26 14:32
2018/07/26 15:49