gpt4 book ai didi

ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:57 26 4
gpt4 key购买 nike

我在开发的 Rails 3 网站的一些搜索功能上遇到了一个小问题。我有一个简单的 Post 模型,如下所示:

class Post < ActiveRecord::Base
acts_as_taggable
end

我正在使用 acts_as_taggable_on 来更轻松地向我的帖子添加标签。当我有一个标记为“rails”的帖子并执行以下操作时,一切正常:

@posts = Post.tagged_with("rails")

问题是,我还想搜索帖子的标题。当我有一篇标题为“Hello world”并标记为“rails”的帖子时,我希望能够通过搜索“hello”“rails”来找到这篇帖子。因此,我希望标题列的 LIKE 语句与 acts_as_taggable_on 提供的 tagged_with 方法相结合。 where 范围不起作用,因为它使用 AND 而不是 OR

我希望 meta_search 能解决这个问题,但这对我不起作用。我尝试了几件事。以下是我尝试过的两个示例:

@search = Post.search(:tagged_with_or_title_like => params[:search])
@search = Post.search(:title_like => params[:search], :tagged_with => params[:search])

它只是无法识别“tagged_with”。这是我第一次使用 meta_search,所以我可能在这里做错了什么。 ;) 我在某处读到过 searchlogicacts_as_taggable_on 结合使用,但由于它不支持 Rails 3,我无法使用它。

我希望这里有人能帮我解决这个问题。任何人都知道如何将 acts_as_taggable_onmeta_search 结合起来?或者可能知道没有 meta_search 的解决方案?另外,如果 acts_as_taggable_on 有更好的选择,可以与 meta_search 配合使用,我也很想听听。 :)

编辑:我在不使用 tagged_withmeta_search 的情况下让它工作。它看起来像这样:

Post.select("DISTINCT posts.*").joins(:base_tags).where("posts.title LIKE ? OR tags.name = ?", "%"+params[:search]+"%", params[:search])

创建的查询很荒谬,所以我尝试了一条不同的路线:没有 acts_as_taggable_onmeta_search。我自己创建了一个标签表,并使用 has_and_belongs_to_many 将其连接到帖子。我不会有其他表需要连接到标签,所以这对我来说很有效。我创建了一个搜索标签和标题的范围:

scope :search, lambda { |search| select("DISTINCT posts.*").joins(:tags).where("posts.title LIKE ? OR tags.name = ?", "%"+search+"%", search) }

现在我可以执行以下操作:

Post.search(params[:search])

效果很好,查询也很不错。不过,如果有人知道更好的方法:请告诉我。它也可能对通过 Google 来到这里的人有所帮助。

最佳答案

Post.metasearch({:title_or_tag_taggings_tag_name_contains => params[:search]})

享受

关于ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com