Рельсы Область для ассоциации 0 размера - PullRequest
3 голосов
/ 21 июня 2011

У меня проблемы с определением метода области видимости для всех Foos, у которых нет баров. То есть:

class Foo < ActiveRecord::Base

  has_may :bars

end

class Bar < ActiveRecord::Base

  belongs_to :foo

end

Я хотел бы написать метод области видимости, который возвращает мне все фу, у которых нет баров. Что-то вроде:

class Foo < ActiveRecord::Base

  has_may :bars

  scope :has_no_bars, includes(:bars).where("COUNT(foo.bars) = 0")

end

Но я не понимаю подходящий синтаксис. Любая помощь? Рад использовать решение MetaWhere, если проще.

1 Ответ

3 голосов
/ 22 июня 2011

Чтобы решить вашу проблему, вам нужен либо дополнительный выбор, либо внешнее объединение + группа + уникальный. AFAIK, что невозможно с Rails AR.

Примерно было бы использовать функцию AR * counter-cache и сделать ваш запрос таким же простым, как

scope :has_no_bars, where("bars_count = 0")

Это не на 100% правильное отношение, но экономит вам много работы, а также намного лучше масштабируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...