提交rails表单时忽略空白字段

时间:2014-12-03 16:46:42

标签: ruby-on-rails postgresql

我正在使用多个下拉菜单来创建搜索,如果用户没有选择,则会提交''。我需要一个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") %>

2 个答案:

答案 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_blankprompt

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