clayfish2008-12-10

よくあるこんなコードを

@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)

Rails Way (Professional Ruby Series)

実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック

実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック