Как получить доступ к коллекции через другую коллекцию, используя ActiveRecord - PullRequest
0 голосов
/ 11 января 2012

Прежде всего, извините, если название не очень точное.

Допустим, у меня есть следующие модели:

class User < ActiveRecord::Base
    belongs_to :user_group
end

class UserGroup < ActiveRecord::Base
    has_many :users
    has_many :records
end

class Record < ActiveRecord::Base
    belongs_to :user_group
    has_many :invoices
end

class Invoice < ActiveRecord::Base
    belongs_to :record
end

Я хочу получить доступ от current_user (Пользователь) квсе неоплаченные счета его группы пользователей.Примерно так:

current_user.user_group.records.invoices.where(:payment => false)

Очевидно, что приведенный выше код не работает.Самый близкий подход, который я нашел, это:

class UserGroup
  def unpaid_invoices
    records.map{|r| r.invoices.unpaid}
  end
end

class Invoice
  def self.unpaid
    where(:payment => false)
  end
end

И тогда я могу сделать:

current_user.user_group.unpaid_invoices

Однако это не масштабируется, потому что когда я хочу использовать новое условие,как счета на сумму, превышающие 1000 долларов, мне нужно создать два новых метода в этих моделях.

Есть какой-то магический путь для этого?Я что-то пропустил?Спасибо!

1 Ответ

0 голосов
/ 11 января 2012

Вы можете добавить что-то подобное в группу пользователей:

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