【问题标题】:Search ignoring certain blank parameters搜索忽略某些空白参数
【发布时间】:2012-09-03 18:14:52
【问题描述】:

我有一个简单的搜索操作,它有 3 个参数和一个搜索模型的 where 方法。如果我搜索并且某些参数为nil,它将不会返回我想要的记录。我希望它仅使用非 nil/blank 的参数来搜索数据库。所以如果只输入一个类别并在参数中发送,我希望我的控制器忽略其他两个参数。但是,如果存在其他参数,我希望将它们包含在搜索中。

我尝试了很多方法,但无法使其正常工作。这是我的代码。

hash = []
cat = :category_id => params[:category_id]
col = :color_id => params[:color_id]
brand = :brand_id => params[:brand_id]

if params[:category_id].present?
  hash += cat
end

if params[:color_id].present?
  hash += col
end

if params[:brand_id].present?
  hash += brand
end

@results = Piece.where(hash).preload(:item).preload(:user).group(:item_id).paginate(:page => params[:page], :per_page => 9)

我已将变量放入名为 to_a 的字符串和散列中,并用 (",") 将它们连接起来。没有任何效果。

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3.2


    【解决方案1】:

    试试这个代码。

    criteria = { :category_id => params[:category_id], :color_id => params[:color_id],
      :brand_id => params[:brand_id] }.select { |key,value| value.present? }
    
    
    @results = Piece.where(criteria).preload(:item).preload(:user).group(:item_id).
      paginate(:page => params[:page], :per_page => 9) 
    

    【讨论】:

    • 正是我想要的,而且非常小巧:)
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多