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つの新しいメソッドを作成する必要があります。
これを行うにはいくつかの魔法のような方法がありますか?何か不足していますか?ありがとうございました!
あなたはhas_manyの 'のようなUserGroup'何か'内部で宣言することができます:請求書、:=>を通じて:records' – taro
臥、それはとても簡単で、便利です。私は今noobを感じる:)。回答として投稿してください、私はそれを受け入れるでしょう。ありがとう。 –
ところで、今まで私は常に多対多の関係のために 'has_many:through'を使用していたので、あなたのソリューションは私を驚かせます。 _Theのにhas_manyの:協会からも http://guides.rubyonrails.org/association_basics associations._にネストにhas_manyを通じて「ショートカット」を設定するために有用である私は、このアプローチはまた、Railsのガイドに記載されていました .html#the-has_many-through-association –