Я пытаюсь написать SQL-запрос, который позволит вернуть любые записи, помеченные определенными значениями, и исключить любой из тех результатов, которые имеют другие теги.Исключая записи из поиска, связанные с записью
Теги применяются с использованием присоединиться к модели, например:
class Customer < ActiveRecord::Base
has_many :tag_assignments
has_many :tags, :through => :tag_assignments
end
class Tag < ActiveRecord::Base
has_many :tag_assignments
has_many :customers, :through => :tag_assignments
end
class TagAssignment < ActiveRecord::Base
belongs_to :customer
belongs_to :tag
end
Запрос я в настоящее время является:
SELECT DISTINCT customers.* FROM customers LEFT OUTER JOIN tag_assignments ON tag_assignments.customer_id = customers.id WHERE (tag_assignments.tag_id NOT IN (?))
? затем заменяется в запросе по списку тегов, которые я не хочу включать.
Это прекрасно работает, когда клиент имеет только один тег, но как только они получат несколько тегов, они появятся, несмотря на исключение, так как один из их других тегов соответствует.
Следует иметь в виду, что это необходимо для продолжения работы при добавлении дополнительных предложений (таких как требование присутствия других тегов или соответствия другим атрибутам клиента), но любая точка в правильном направлении будет оценена.