搜索模型Rails中的每个字段或属性

时间:2014-10-21 02:24:56

标签: ruby-on-rails ruby-on-rails-4 model

我有一个名为Company的简单模型,其中包含姓名,联系电子邮件,地址等属性。我创建了一个搜索表单,用户可以通过搜索任何属性来查找公司,例如,城市,名称商业等。

我是Rails的新手,但我已经弄清楚如何在我的控制器中让它像这样工作。

    if(params[:searchstring].present?)
          logger.debug "*** Running search --> "
          term = params[:searchstring]
          @companies = Company.where('name LIKE ? OR name LIKE ? OR contactemail LIKE ? OR city LIKE ?' , "%#{term}%", "%#{term}%", "%#{term}%","%#{term}%" ).paginate(page: params[:page]).order('id DESC')    
        else
          logger.debug "*** Running search --> get em all "
          @companies = Company.all.paginate(page: params[:page], per_page: 5).order('id DESC')    
        end
end

这很好但我猜测有一种更简单的方法。我每次添加属性时都不想修改查询。关于如何改进这个的任何想法?

1 个答案:

答案 0 :(得分:1)

你可以选择这样的东西(这只是一个例子,可能是一种更好的方式,但它是最好的方式)

# company.rb
def self.search_all_properties term 
    query = ''
    properties = Company.column_names
    properties.each_with_index do |prop, index|
        if index < properties.count - 1
            query = query + prop + ' LIKE :term OR '
        else
            query = query + prop + ' LIKE :term'
        end
    end

    term = "%" + term + "%"
    Company.where(query, :term => term) 
end

并像这样使用

Company.search_all_properties term