[前][次][番号順一覧][スレッド一覧]

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..]