레일 4.1 앱에서 acts_as_taggable_on gem을 사용하고 있습니다. 태그 또는 여러 태그를 기준으로 검색 범위를 사용하고 있습니다. 여러 태그가 매개 변수로 주어질 때 나는 모든 태그를 포함하는 태그가 달린 항목 만 반환하도록 검색을 원합니다. 현재 I 범위는 태그 (tag_a 또는 tag_b 또는 tag_c) 중 적어도 하나를 포함하는 태그가있는 항목을 반환합니다. 대신 범위가 AND 조건 (tag_a AND tag_b AND tag_c)이 필요합니다. 검색 PARAMS이 programming
및 ruby
을 포함하는 경우레일스 활성 레코드 쿼리 - 여러 값 조건 (OR 대신 AND)
예
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
현재 모두 document_a 및 document_b가 반환됩니다. 원하는 것은 검색 매개 변수에 programming
및 ruby
이 포함 된 경우 document_a 만 반환되는 범위입니다.
시도해 보셨습니까 : 'tagged_with'? 예 :'Item.joins (문서 : [{tagging : : tag}]). tagged_with (fields)'? – Surya
@ User089247 귀하의 제안에 감사드립니다. 태그가 Document 모델이 아닌 User 모델 : NoMethodError (#
diasks2
@ diask2 : 필자는'User ... '라고 쓰지는 않았다. 그러나'Item .. '이었지만 예제와 실제 코드의 차이점을 이해하고 그 아이디어를 사용하여 솔루션을 작동시켜야한다. – Surya