如何在不要求标准的情况下根据多个搜索条件搜索表格?

时间:2012-12-17 21:42:14

标签: ruby-on-rails ruby-on-rails-3.1

我创建了一个包含产品手册的表格。我想允许用户根据三个下拉菜单(产品类型,运营商,概念)搜索表格。我已经创建了菜单,控制器当前正确地通过了参数。如果用户按所有3个条件搜索,则搜索会正确显示。但是,如果用户只选择一个或两个搜索选项,则结果始终为空。我理解为什么会发生这种情况(该模型试图通过所有三个标准进行搜索,当缺少一个时,它只是在该字段中搜索nil),但我确信正确的解决方案。请帮忙!我的模型如下......谢谢

def self.search (search_product_type, search_carrier, search_concept)

  if search_product_type.blank? && search_carrier.blank? && search_concept.blank?
    scoped
  else
    Ad.where(carrier_id: search_carrier)
      .where(product_type_id: search_product_type)
      .where(concept: search_concept)
  end
end

1 个答案:

答案 0 :(得分:1)

正如@Deefour在评论中所说,你应该使用宝石。但是,你也可以做这样的事情:

def self.search (search_product_type, search_carrier, search_concept)

  if search_product_type.blank? && search_carrier.blank? && search_concept.blank?
    scoped
  else
    tmp = {}

    if search_carrier.present?
       tmp[:carrier_id] = search_carrier
    end

    if search_product_type.present?
       tmp[:product_type_id] = search_product_type
    end

    if search_carrier.present?
       tmp[:concept] = search_concept
    end

    Ad.where(tmp)
  end
end