【问题标题】:How to: Searchlogic and Tags如何:搜索逻辑和标签
【发布时间】:2011-01-29 23:49:26
【问题描述】:

我已经安装了 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 以允许我搜索可标记插件添加到每个产品的标签。

谢谢!

【问题讨论】:

    标签: ruby-on-rails tags named-scope


    【解决方案1】:

    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>
    

    【讨论】:

    • 谢谢 Michal,我误解了它的使用方式。我看到作者放了一个named_score“tagged_with”,正如我所说,我已经尝试过,但没有正确解释它。我很欣赏你的回应。但是,当我尝试使用


      我收到错误“参数数量错误(0 代表 1)”当我在字段中输入任何值时。你知道它为什么会这样吗?
    • 您的操作中引发此错误的代码是什么?您是否尝试过从 Rails 控制台执行Product.name_like_or_description_like_or_tagged_with("...")
    • 我尝试设置一个 scope_procedure,如果它就像你在你的 :matching 示例中所说的那样,你没有做 name_or_description_or_matched_like,它就可以正常工作。我不能链接 tagged_with 或自定义范围,所以我现在确定要做什么,我希望有人以前做过。我在控制台和应用程序中都试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多