2

我已经安装了 searchlogic 并添加了 will_paginate 等。

我目前有一个使用acts_as_taggable_on 插件启用标记的产品模型。我想使用 searchlogic 搜索标签。

这是可标记插件页面:http: //github.com/mbleigh/acts-as-taggable-on

每个产品都有一个“tag_list”,我可以使用 Product.tag_list 访问它

或者我可以使用 Product.tags[0] 访问特定标签

我找不到用于搜索的范围,但是使用搜索逻辑。这是我工作表格的一部分。

<p>
    <%= f.label :name_or_description_like, "Name" %><br />
    <%= f.text_field :name_or_description_like %>
</p>

我已经尝试过 :name_or_description_or_tagged_with_like 和 :name_or_description_or_tags_like 以及 :name_or_description_or_tags_list_like 来尝试让它工作,但我一直有一个错误,提示找不到我尝试过的选项(找不到命名范围)。我想知道如何让这个工作或如何创建我自己的named_scope,这将允许我搜索由可标记插件添加到每个产品的标签。

谢谢!

4

1 回答 1

2

Searchlogic 使用现有的命名范围。从acts-as-taggable-on文档中,我看到可标记模型被tagged_with命名为范围。所以 Product.tagged_with("tag") 应该给你所有带有“tag”标签的产品。您可以将 searchlogic 中的条件与“或”结合起来,因此如果您想查找名称类似、描述类似或标签匹配给定文本的所有产品,您应该使用以下范围:

Product.name_like_or_description_like_or_tagged_with("...")

您可以:name_like_or_description_like_or_tagged_with直接在表单中使用,也可以创建自己的自定义范围程序进行搜索:

scope_procedure :matching, lambda {|text|
  name_like_or_description_like_or_tagged_with(text)
}

然后,在您的表单中,只需使用:matching.

<p>
    <%= f.label :matching, "Search term" %><br />
    <%= f.text_field :matching %>
</p>
于 2010-03-21T09:23:05.100 回答