1

我刚刚观看了关于一个简单搜索表单的 railscast ,我想在我的应用程序中做类似的事情,但我不想只找到完全匹配的结果。

我有一个名为Project以下字段的模型:

  • name,
  • description,
  • keyword1, 和
  • keyword2.

鉴于从 railscast 中获取的代码:

models/project.rb

def self.search(search)
    if search
        find( :all, :conditions => ['name LIKE ?', "%#{search}%"] )
    else
        find(:all)
    end
end

如果我想搜索“Pizza”,我希望它匹配一个名为“Master Pizza Project”的项目,关键字1 =>“MasterPizza”和keyword2 =>“Pizza”,我将如何重构上面的代码?

另外,区分大小写是否有问题?

4

4 回答 4

0

还有另一个 Railscast,Ryan Bates 谈到利用 Sphinx 进行全文搜索。我强烈推荐这种方法,而不是从头开始做事:

http://railscasts.com/episodes/120-thinking-sphinx

于 2011-05-30T20:15:44.683 回答
0

您需要将查询拆分为原子,将每个原子作为单独的查询运行,然后合并每个原子的结果。

在这一点上,事情变得非常复杂,您最好使用搜索库,例如Acts as Indexed,它会为您处理所有这些。

[披露] 我是 Acts as Indexed 的作者。

于 2011-05-30T20:18:00.580 回答
0

查看MetasearchMetawhere gem。

于 2011-05-30T20:24:12.857 回答
0

我不太明白你的 q 但我希望这是有道理的:

def self.search(search)
    if search
     where('title LIKE ? OR keyword1 LIKE ? OR keyword2 LIKE ?',"%#{search}%", "%#{search}%","%#{search}%")
    # find(:all, :conditions => ['title LIKE ?', "%#{search}%"])
    else
      all
    end
  end    
于 2012-02-08T23:32:06.640 回答