我在Rails 4.1應用程序中使用acts_as_taggable_on gem。我正在使用範圍根據標籤或多個標籤進行搜索。當給出多個標籤作爲參數時,我希望搜索只返回包含所有標籤的標籤項目。目前,我已返回的作用域返回包含至少一個標記(tag_a或tag_b或tag_c)的標記項目。我想要一個作用域而不是AND條件(tag_a AND tag_b AND tag_c)。Rails Active Record Query - 多值條件(AND而不是OR)
例
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
目前,如果搜索PARAMS包括programming
和ruby
都document_a和document_b將被退回。我想要的是一個範圍,如果搜索參數包括programming
和ruby
,則只返回document_a。
你試過了嗎:'tagged_with'?例如:'Item.joins(文檔:[{taggings::tag}])。tagged_with(fields)'? – Surya 2014-11-03 09:50:30
@ User089247感謝您的建議。這給了我一個錯誤,雖然標籤是在Document模型上,而不是User模型:'NoMethodError(未定義方法'tagged_with'爲#
diasks2
2014-11-03 10:25:48
@ diask2:我沒有把它寫成'User ...'它是'Item..',然而,我們必須理解示例代碼和實際代碼之間的區別,並且使用這個想法來使解決方案有效。 – Surya 2014-11-03 10:42:15