使用metawhere搜索标签

时间:2011-02-09 09:32:06

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

我正在尝试对模型执行多列搜索,并且它是关联的标记。我正在使用metawhere和act-as-taggable-on。基本上我有一个标题和正文的模型,它有一定数量的带有名字的标签。我一直试图用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}%'))"

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

1 个答案:

答案 0 :(得分:0)

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

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