0

我有工作安置模型,我想实现应该是关键字搜索的搜索功能,即我的意思是即使您在搜索中键入任何关键字,并且如果它存在于工作安置表的数据库中,它应该显示结果。

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

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

同样在上面的代码中,虽然我已经给出了类别的条件,但它没有正确执行。当我进行搜索时,它给出的结果与名称字段匹配,但它没有评估 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 个字段。

4

2 回答 2

0

查看Thinking Sphinx,它可以解决您的问题,并具有更多功能,例如子字符串搜索、通配符支持等

于 2012-05-28T06:13:00.257 回答
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) <...>) } 
于 2012-05-28T10:25:15.980 回答