我有工作场所模型,我希望实现搜索功能,这应该是关键字搜索,即我的意思是即使您在搜索中键入任何关键字,如果它存在于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个字段。
答案 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) <...>) }