このクエリを検索メソッドに追加しようとしています。レールで.where()クエリを組み合わせる方法
books = Book.where("category_id LIKE?","%{params[:category]}%").where("price LIKE <= ?", "%#{params[:price]}%").
私は間違っていますか?
class Book < ApplicationRecord
belongs_to :category
def self.search(params)
books = Book.where("title LIKE ?","%#{params[:search]}%") if params[:search].present?
books = Book.where("category_id LIKE ?","%#{params[:category]}%").where("price LIKE <= ?", "%#{params[:price]}%")
end
books_controller.rb
def search
if params[:category].present?
@books = Book.where(category_id: params[:category])
elsif params[:search].blank?
@books = Book.all
else
@books = Book.search(params)
end
end
search.html.erb
<%= form_tag search_books_path, method: :get do %>
<%= select_tag :category, options_from_collection_for_select(Category.all, :id, :name), :include_blank => "Select Category" %>
<%=number_field_tag :price%>
<%=text_field_tag :search, nil, placeholder: "search" %>
<%= submit_tag "Search" %>
? 'where'節を問題なく連鎖させることができるはずです。しかし、あなたの 'LIKE'構文の使い方についてはわかりません - あなたの' category_id'と 'price'カラムは整数かテキストですか? 'LIKE'は通常テキスト用ですが、整数フィールドのように聞こえます。 – Brian
my [category_id]とpriceフィールドは両方とも整数です。私はまったくエラーはありません。検索は単にルールを使用するだけではありません。このルールのみを使用しています。@books = Book.where(category_id:params [:category]) – user109705