rails:2336
From: 松田 明 <ronnie@d...>
Date: Fri, 24 Aug 2007 12:04:56 +0900
Subject: [rails:2336] Re: 再参加します & has_many :through に関して
松田と申します。 この件、誰も回答しないようなので。 :includeは、配列やハッシュのリテラルを使って いくらでもネストすることができます。 今回の例だと以下のような記述になるかと思いますが、 books = Book.find(:all, :include => [:authors => :author_groups]) 更に、例えば AuthorGroupから他テーブル AuthorGroupTypeに結合する場合は 最近話題のハッシュを使って、以下のように書けるはずです。 books = Book.find(:all, :include => [:authors => {:author_groups => :author_group_type}]) そういえばこのあたりの機能ってあまりドキュメント等を 見かけないですね。 軽くぐぐってみたらこんな感じのサイトが出てきました。 The beauty of a nested ':include' option http://snippets.dzone.com/posts/show/2089 それから、手元の舞波本だと104ページあたりに 「:includeの入れ子」というバッチリな章がありました。 さすがですね。 -- 松田 明 <ronnie@d...> OHGUSHI KAZUYUKI さんは書きました: > 一度外れたのですが社内ツールとしてちょっと使うことになりまして・・・ > よろしくお願いします > > 早速ですが > > Book > has_many :authors, :through => :book_has_authors > has_many :book_has_authors > > Author > has_many :books, :through => :book_has_authors > has_many :book_has_authors > belongs_to :author_group > > BookHasAuthor > belongs_to :books > belongs_to :authors > > AutorGroup > has_many :authors > > のようなクラスとリレーションを設定した際に > > books = Book.find(XXXX) > for book in books > authors = book.authors > for author in authors > p author.author_group > end > end > > とDBからデータを引き出す場合には > > books = Book.find(:all) > よりも > books = Book.find(:all, :include => [:authors]) > としたほうがDBアクセスの数が減ると思うのですが > author.author_group > の際にまたDBにアクセスせずにすむ方法はありますか? > :join あたりを使うと出来るような気はするのですが -- ML: rails@r... 使い方: http://QuickML.com/
2335 2007-08-24 03:19 [kazuyuki.ohgushi@g..] 再参加します & has_many :through に関して -> 2336 2007-08-24 05:04 ┗[ronnie@d... ] 2337 2007-08-24 09:22 ┗[kazuyuki.ohgushi@g..]