我正在使用多个下拉菜单来创建搜索,如果用户没有选择,则会提交''。我需要一个catchall,类似于SQL中的*作为默认值。即如果我在下拉列表中有5个品牌,我希望默认查询为5个品牌。像Brand.where(品牌:ALL)之类的东西。提前谢谢。
<%= select_tag(:brand, options_for_select(["Brand 1","Brand 2","Brand 3","Brand 4","Other"].map{ |num| [num,num] }),id: 'brand', prompt: 'Brand', class: "table") %>
答案 0 :(得分:1)
如下:
product.rb
class Product < ActiveRecord::Base
scope :by_brand, -> (brand) { where brand: brand }
# put more scopes for the other drop-down boxes
end
product_controller.rb
class ProductsController < ApplicationController
def search
@products = Product.all
@products = @products.by_brand(params[:brand]) unless params[:brand].blank?
# more filtering here
end
end
答案 1 :(得分:0)
您的选择中可能需要include_blank
和prompt
。
select_tag(..., include_blank: true, prompt: 'All')
现在,下拉列表中的第一个条目将显示空白值,并为其标签显示“全部”。
然后,您需要确保在查询时不使用该条件,如下所示(您没有发布任何代码,因此我不知道您的模型):
class MyController ...
def show
@items = Item.all
@items = @items.where(brand: params[:brand]) if params[:brand].present?
@items = @items.where(size: params[:size]) if params[:size].present?
@items = @items.where(year: params[:year]) if params[:year].present?
@items = @items.where(color: params[:color]) if params[:color].present?
end
end