Как использовать область Rails 3 для фильтрации в таблице соединений habtm, где связанные записи не существуют? - PullRequest
13 голосов
/ 06 октября 2010

У меня есть модель 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 Ответ

23 голосов
/ 07 октября 2010

Насколько мне известно, 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')

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

...