Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将元搜索与作为标记的行为相结合_Ruby On Rails_Ruby_Acts As Taggable On_Meta Search - Fatal编程技术网

Ruby on rails 将元搜索与作为标记的行为相结合

Ruby on rails 将元搜索与作为标记的行为相结合,ruby-on-rails,ruby,acts-as-taggable-on,meta-search,Ruby On Rails,Ruby,Acts As Taggable On,Meta Search,我在开发Rails 3网站时遇到了一些搜索功能方面的小问题。我有一个简单的Post模型,如下所示: class Post < ActiveRecord::Base acts_as_taggable end Post.select("DISTINCT posts.*").joins(:base_tags).where("posts.title LIKE ? OR tags.name = ?", "%"+params[:search]+"%", params[:search]) 问题是

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

class Post < ActiveRecord::Base
  acts_as_taggable
end
Post.select("DISTINCT posts.*").joins(:base_tags).where("posts.title LIKE ? OR tags.name = ?", "%"+params[:search]+"%", params[:search])
问题是,我还想搜索帖子的标题。当我有一篇标题为“Hello world”并标记为“rails”的帖子时,我希望能够通过搜索“Hello”或“rails”来找到这篇帖子。因此,我希望标题列有一个类似于的
语句,与
方法提供的标记相结合。
where
范围不起作用,因为它使用
而不是

我希望
meta\u 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
,所以我可能在这里做错了什么我在某个地方读到过,
searchlogic
作为标签一起工作,但由于它不支持Rails 3,所以我不能使用它

我希望这里有人能帮我解决这个问题。有人知道如何将
作为标记与
元搜索相结合吗?或者可能知道一个没有
元搜索的解决方案
?另外,如果有更好的
作为标记在
上的选项与
meta\u搜索一起使用
我也很乐意听到这一点

编辑: 我没有使用
tagged\u with
meta\u search
就能让它工作。看起来是这样的:

class Post < ActiveRecord::Base
  acts_as_taggable
end
Post.select("DISTINCT posts.*").joins(:base_tags).where("posts.title LIKE ? OR tags.name = ?", "%"+params[:search]+"%", params[:search])
创建的查询很可笑,所以我尝试了另一种方法:不使用
作为标记在
上和
元搜索
。我自己创建了一个标签表,并将其连接到带有
has\u和\u-beliens\u-to\u-many
的帖子。我不会有其他表需要连接到标记,所以这对我来说就足够了。我创建了一个搜索标记和标题的范围:

scope :search, lambda { |search| select("DISTINCT posts.*").joins(:tags).where("posts.title LIKE ? OR tags.name = ?", "%"+search+"%", search) }
现在,我可以执行以下操作:

Post.search(params[:search])

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

我认为您正在研究的解决方案是使用数据库视图作为新模型

您可以创建包含联接表和Post标记的视图

然后,您可以使用meta_搜索来搜索它,没有问题

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

享受

我更新了问题的解决方法。我最终放弃了acts_as_taggable和meta_search。也许你可以试试塞奇的答案。如果有效,我会将其标记为已回答。:)我刚刚测试了在我的旧项目中这是否有效,它是否有效!因此,我将此标记为已回答。谢谢。:)