Как использовать область Rails 3 для фильтрации в таблице соединения habtm, где соответствующие записи не существуют?
У меня есть модель Author
, которая habtm: feeds. Использование Rails 3 позволяет настроить область, в которой находятся все авторы, у которых нет связанных фидов.
class Author < ActiveRecord::Base
has_and_belongs_to_many :feeds
scope :without_feed, joins(:feeds).where("authors_feeds.feed_id is null")
end
... похоже, не работает. Это похоже на простую вещь. Что мне здесь не хватает?
Ответы
Ответ 1
Насколько я знаю, ActiveRecord/Arel не имеет возможности определять внешние соединения. Поэтому вам придется писать немного больше SQL, чем обычно. Что-то вроде этого должно сделать трюк:
scope :without_feed, joins('left outer join authors_feeds on authors.id=authors_feeds.author_id').where('authors_feeds.feed_id is null')
Я, конечно, угадываю имена ваших таблиц и внешние ключи. Но это должно дать вам картину.