在rails中搜索功能

时间:2012-05-28 06:05:54

标签: ruby-on-rails ruby-on-rails-3 search controller

我有工作场所模型,我希望实现搜索功能,这应该是关键字搜索,即我的意思是即使您在搜索中键入任何关键字,如果它存在于jobplacement表的数据库中,它应该显示结果

目前我正在使用下面的代码,它只匹配1个字段,即公司名称和类别,如params [:category]。以下是我的jobplacementcontroller / index action的代码

if params[:search]
      @search_condition = "%" + params[:search] + "%"
      @searchresult = Jobplacement.where(['name LIKE ? and category = ?', @search_condition ,params[:category]])
else 
     @searchresult = ""
end

同样在上面的代码中,虽然我已经给出了类别的条件,但它没有正确执行。当我搜索时,它会给出与名称字段匹配的结果但不评估参数[:category] ​​condition.it甚至显示所有记录如果他们不在params [:category]。


以下是我的职业介绍模型中的字段:

t.string   "name"
t.string   "designation"
t.string   "qualification"
t.integer  "years_of_exp"
t.string   "location"
t.integer  "noofpost"
t.string   "jobprofile"
t.string   "salaryoffered"
t.string   "contactperson"
t.string   "employmenttype"
t.text     "address"
t.string   "city"
t.string   "state"
t.string   "country"
t.integer  "contactno"
t.string   "website"
t.text     "aboutcompany"

所以当我在搜索中输入任何关键字,如果它与任何字段的数据匹配时,它应该返回该数据。我怎么能这样做... 如何解决这个params [:category]错误,如何进行与职位模型数据库中存在的任何记录匹配的关键字搜索,而不仅仅是1个字段。

2 个答案:

答案 0 :(得分:0)

查看Thinking Sphinx,它可以解决您的问题,并提供更多功能,如子字符串搜索,野外字符支持等等

答案 1 :(得分:0)

使用squeel gem http://erniemiller.org/projects/squeel/ 你可以这样做:

terms = params[:search].split 
Jobplacement.where {name.eq(params[:category]) & (name.like_any(terms) | designation.like_any(terms) | qualification.like_any(terms) <...>) }