【问题标题】:Searching tags with metawhere使用 metawhere 搜索标签
【发布时间】:2011-02-09 09:32:05
【问题描述】:

我正在尝试对模型及其关联标签执行多列搜索。我正在使用 metawhere 并为此充当可标记的角色。基本上我有一个带有标题和正文的模型,其中有一定数量的带有名称的标签。我一直在尝试使用 metawhere 设置此查询,但是当我尝试加入模型的标签时它从不返回任何结果。我有一个名为“str”的变量,用于搜索具有以下内容的 Post 模型...

Post.where(:title.matches % '#{str}%' | :body.matches % '#{str}%' | {:tags => [:name.matches % '#{str}%']}).joins(:tags)

生成以下sql...

=> "SELECT `posts`.* FROM `posts` INNER JOIN `taggings` ON `posts`.`id` = `taggings`.`taggable_id` AND `taggings`.`taggable_type` = 'Post' INNER JOIN `tags` ON 'taggings.tagger_id IS NULL AND taggings.context = \\'tags\\'' WHERE (((`posts`.`title` LIKE '\#{str}%' OR `posts`.`body` LIKE '\#{str}%') OR `tags`.`name` LIKE '\#{str}%'))"

谁能指出我正确的方向?任何帮助将不胜感激。

【问题讨论】:

  • 你能把这个查询生成的sql粘贴进去吗?
  • 我忘记将 str 变量包装在 #{} 中,并将生成的 sql 添加到我最初的问题中。

标签: ruby-on-rails acts-as-taggable-on meta-where


【解决方案1】:

尝试:(假设启用了运算符重载)

.where((:title =~ str) | (:body =~ str) | {:tags => [:name =~ str]})

【讨论】:

  • 由于某种原因,这给了我一个类型不匹配的错误,说“类型不匹配:给定的字符串”。
  • 我忘了打开运算符重载,现在我没有收到类型不匹配错误,但它似乎不是在搜索标签。
  • 我最终使用这个元搜索动态查找器让它工作...title_or_body_or_tags_name_or_taggings_tag_name_contains
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多