我尝试将此查询添加到我的搜索方法中。
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" %>
答案 0 :(得分:1)
当您提交搜索表单时,您将发送params[:category]
值,并且您的第一个if语句params[:category].present?
评估为true。这就是为什么你只得到结果:
@books = Book.where(category_id: params[:category])
您可以覆盖if语句:
def search
if params[:price].present? && params[:category].present?
@books = Book.search(params)
elsif params[:category].present?
@books = Book.where(category_id: params[:category])
else
@books = Book.all
end
end
答案 1 :(得分:0)
你必须像这样链接它们。
def self.search(params)
books = Book.all
books = books.where("title LIKE ?","%#{params[:search]}%") if params[:search].present?
books = books.where("category_id LIKE ?","%#{params[:category]}%").where("price LIKE <= ?", "%#{params[:price]}%")
end
不知道你为什么使用LIKE
作为整数,我认为一个简单的=
会这样做。在比较字符串时,您还需要'
运算符LIKE
。
def self.search(params)
books = Book.all
books = books.where("title LIKE '?'",params[:search]) if params[:search].present?
books = books.where(category_id: params[:category]).where("price <= ?", params[:price])
end