Как использовать область 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')

Я, конечно, угадываю имена ваших таблиц и внешние ключи. Но это должно дать вам картину.