У меня есть прецедент, чтобы применить NOT IN как условие в where where для модели с has_many ассоциацией.
У меня есть модель пользователя, у которой есть отношения has_many с событиями.
Для получения всех пользователей, у которых есть конкретное событие, помогает код ниже.
User.find(:all, joins: :events, conditions: [events.event_name = 'Event One'] )
Я ищу оптимальный способ получить обратное от этого, как и для всех пользователей, у которых нет определенного события.
Что-то вроде User.find(:all, joins: :events, conditions: [clause to fetch all users who do not have event_name 'Event One' ] )
Вы можете сделать этот запрос ниже
User.where("id NOT IN (?)", User.joins(:events).where("events.name = ?", "Event One").map(&:id))
Надеюсь, это поможет вам.
Измените запрос следующим образом:
User.find(:all, joins: :events, conditions: [events.event_name != 'Event One'] )
если это не работает, вы можете попробовать что-то вроде ниже.
User.joins(:events).where('events.event_name != ?', 'Event One').distinct
Также вы можете проверить другие альтернативы, чтобы получить записи uniq здесь
Запрос может быть следующим:
User.joins(:events).where.not(events: { name: ["Event One"] }).all
User.find(:all, joins: :events, conditions: [events.event_name != 'Event One'] )