will_paginate で pagination しつつ :include を効かせる方法
よくあるこんなコードを
@members = Member.find :all
will_paginate で pagination 化するとこんな風になりますが
@members = Member.paginate :page=>params[:page], :per_page=>15
こんな(eager loadingな)コードを
@members = Member.find :all, :include=>:more_info
will_paginate の引数にそのまま追加するとエラーになっちゃいます
@members = Member.paginate :page=>params[:page], :per_page=>15, :include=>:more_info
はて、どうしたもんだろうと will_paginate の API リファレンスをしらべたらわかりました.
とりあえず以下のようにすれば OK.
# in ***_controller.rb(コントローラ)
@members = Member.paginate :page=>params[:page], :per_page=>15, :finder=>:find_with_more_info
# in ***.rb(モデル)
class Member < ActiveRecord::Base
def self.find_with_more_info args
args[:include] ||= :more_info
self.find :all, args
end
end
もうちょっとかっこよく書けないか思案中…
Rails Way (Professional Ruby Series)
- 作者: Obie Fernandez,豊田祐司,株式会社クイープ
- 出版社/メーカー: 翔泳社
- 発売日: 2008/12/04
- メディア: 大型本
- 購入: 2人 クリック: 50回
- この商品を含むブログ (26件) を見る
実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック
- 作者: Brad Ediger,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/10/27
- メディア: 大型本
- 購入: 7人 クリック: 90回
- この商品を含むブログ (43件) を見る