使用Rails will_paginate gem标记搜索包含/排除

时间:2012-03-14 21:35:37

标签: ruby ruby-on-rails-3 activerecord

我需要根据搜索标记来返回结果,这些标记允许通过在标记前面加上连字符来排除标记(即“食物,水”)

到目前为止,我在我的资源模型中使用了标记搜索:

resources = paginate(page: page, per_page: 30).where('tags.name IN (?)', tags).group('resource_id').having('COUNT(tags.id) = ?', tags.count).joins(:tags)

标记是在搜索字词中传递的标记数组,并使用正则表达式模式进行解析。

为了删除其中包含“water”的结果,我循环搜索结果并删除它们如下:

resources.delete_if do |resource|
    (resource.tags.map(&:name) & exclude_tags).present?
  end

使用will_paginate gem时,会产生返回结果的问题。如果我要求返回30个结果,并且在检索到这些结果后,其中6个被删除,因为它们包含排除标记(水),那么最终结果是浏览器显示24个结果而不是30个。

如何在ActiveRecord查询中完成此操作,而不是在取回结果后删除它们?

0 个答案:

没有答案