複数カラムの検索方法
railsでレシピ投稿アプリを作っています。
tweetテーブルにtext(料理名),item(材料),cook(作り方)のカラムがあります。
現状はtext(料理名)カラムでの検索はできますが、item(材料)カラムでは検索できないので、
textとitemカラムで検索したいです。
コードは書いてみましたがtextからむしかヒットしない状況で原因がわかりません。
分かる方いましたらお教え願いたいです。
複数カラムが検索でヒットしない
ターミナル Started GET "/tweets/searches?utf8=%E2%9C%93&keyword=%E3%83%9E%E3%83%A8%E3%83%8D%E3%83%BC%E3%82%BA&commit=%E6%A4%9C%E7%B4%A2" for ::1 at 2020-06-09 11:48:07 +0900 Processing by Tweets::SearchesController#index as HTML Parameters: {"utf8"=>"✓", "keyword"=>"マヨネーズ", "commit"=>"検索"} Rendering tweets/searches/index.html.erb within layouts/application Tweet Load (0.4ms) SELECT `tweets`.* FROM `tweets` WHERE (text LIKE('%マヨネーズ%') OR item LIKE('%マヨネーズ%')) ↳ app/views/tweets/searches/index.html.erb:6 Rendered tweets/searches/index.html.erb within layouts/application (2.8ms) User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/views/layouts/application.html.erb:28 Completed 200 OK in 58ms (Views: 52.2ms | ActiveRecord: 0.8ms)
該当のソースコード
``tweet.rb
class Tweet < ApplicationRecord
validates :text, presence: true
belongs_to :user
has_many :comments
def self.search(search)
if search
Tweet.where('text LIKE(?) OR item LIKE(?)', "%#{search}%", "%#{search}%")
else Tweet.all end
end
end
tweets_controller
1 2class TweetsController < ApplicationController 3 before_action :set_tweet, only: [:edit, :show] 4 before_action :move_to_index, except: [:index, :show, :search] 5 6 def index 7 @tweets = Tweet.includes(:user).order("created_at DESC").page(params[:page]).per(6) 8 9 end 10 11 def new 12 @tweet = Tweet.new 13 end 14 15 def create 16 Tweet.create(tweet_params) 17 end 18 19 def destroy 20 tweet = Tweet.find(params[:id]) 21 tweet.destroy 22 end 23 24 def edit 25 end 26 27 def update 28 tweet = Tweet.find(params[:id]) 29 tweet.update(tweet_params) 30 end 31 32 def show 33 @tweet = Tweet.find(params[:id]) 34 @comment = Comment.new 35 @comments = @tweet.comments.includes(:user) 36 end 37 38 def search 39 @tweets = Tweet.search(params[:keyword]) 40 end 41 42 private 43 def tweet_params 44 params.require(:tweet).permit(:image, :text, :item, :cook).merge(user_id: current_user.id) 45 end 46 47 def set_tweet 48 @tweet = Tweet.find(params[:id]) 49 end 50 51 def move_to_index 52 redirect_to action: :index unless user_signed_in? 53 end 54end 55 56 57``ビュー 58<%= form_with(url: tweets_searches_path, local: true, method: :get, class: "search-form") do |form| %> 59 <%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %> 60 <%= form.submit "検索", class: "search-btn" %> 61<% end %> 62<div class="contents row"> 63 <% @tweets.each do |tweet| %> 64 <%= render partial: "tweets/tweet", locals: { tweet: tweet } %> 65 <% end %> 66</div> 67### 試したこと 68元々 69 70Tweet.where('text LIKE(?)', "%#{search}%") 71 72変更点 73Tweet.where('text LIKE(?) OR item LIKE(?)', "%#{search}%", "%#{search}%") 74 75### 補足情報(FW/ツールのバージョンなど) 76 77ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 07:20
2020/06/10 12:17
2020/06/11 03:24
2020/06/11 03:35
2020/06/11 03:42
2020/06/11 03:53