2012-01-10 11 views
0

タイトルがあまり正確でない場合は、最初にすべてをお待ちください。ActiveRecordを使用して別のコレクションを使ってコレクションにアクセスする方法

のは、私はこれらのモデルを持っているとしましょう:

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 

、私は彼のUserGroupのすべての未払い請求書に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より大きい、私はそれらのモデルで2つの新しいメソッドを作成する必要があります。

これを行うにはいくつかの魔法のような方法がありますか?何か不足していますか?ありがとうございました!

+2

あなたはhas_manyの 'のようなUserGroup'何か'内部で宣言することができます:請求書、:=>を通じて:records' – taro

+0

臥、それはとても簡単で、便利です。私は今noobを感じる:)。回答として投稿してください、私はそれを受け入れるでしょう。ありがとう。 –

+0

ところで、今まで私は常に多対多の関係のために 'has_many:through'を使用していたので、あなたのソリューションは私を驚かせます。 _Theのにhas_manyの:協会からも http://guides.rubyonrails.org/association_basics associations._にネストにhas_manyを通じて「ショートカット」を設定するために有用である私は、このアプローチはまた、Railsのガイドに記載されていました .html#the-has_many-through-association –

答えて

0

あなたはのUserGroupにそのような何かを追加することができます。

has_many :invoices, :through => :records 
関連する問題