【发布时间】:2014-11-03 19:01:11
【问题描述】:
我在 Rails 4.1 应用程序中使用acts_as_taggable_on gem。我正在使用范围基于标签或多个标签进行搜索。当多个标签作为参数给出时,我希望搜索只返回包含所有标签的标记项目。目前,我的范围返回包含至少一个标签(tag_a OR tag_b OR tag_c)的标记项目。我想要一个范围,而不是 AND 条件(tag_a AND tag_b AND tag_c)。
示例
document_a_tags = ['programming', 'ruby']
document_b_tags = ['programming', 'python']
class User < ActiveRecord::Base
has_many :documents, dependent: :destroy
scope :with_fields, proc { |fields|
if fields.reject!(&:empty?).present?
joins(documents: [{ taggings: :tag }]).where(tags: { slug: fields })
end
}
end
class Document < ActiveRecord::Base
acts_as_taggable
belongs_to :user
end
目前,如果搜索参数包括programming 和ruby,则返回document_a 和document_b。我想要的是一个范围,如果搜索参数包括 programming 和 ruby,则只会返回 document_a。
【问题讨论】:
-
你试过了吗:
tagged_with?例如:Item.joins(documents: [{ taggings: :tag }]).tagged_with(fields)? -
@User089247 感谢您的建议。这给了我一个错误,因为标签在 Document 模型上,而不是 User 模型上:
NoMethodError (undefined methodtagged_with' for #<:activerecord_relation> -
@diask2:我没有写成
User...,而是Item..,但是,必须了解示例代码和实际代码之间的区别,并使用该想法使解决方案有效。
标签: ruby-on-rails activerecord