情シスは何度でも甦るさ。

OracleDB/Ruby好きの情シス部員がお送りします

will_paginateでページ数がおかしい

ActiveRecord+will_paginateで、ページ数を表示する為のcountのSQLがうまくいかずに、ページ数がおかしいということがあった。

SQLの結果は、22件なのに、なぜかcount用のSQLは11件。

うまく、いかないので、直にSQL書くしかないのかなぁ。と思ったが、ググったら他にもそういう人がいるようだった。

http://stackoverflow.com/questions/7939719/will-paginate-generates-wrong-number-of-page-links

結論としては、paginateのtotal_entriesオプションに件数をセットしてあげれば、その件数を全体の件数として認識してくれるようでした。

count = Meet.joins(:legs).where(state_id: state_id).
    count("distinct meets.id,year,month,seq,meets.name")
@meets = Meet.joins(:legs).where(state_id: state_id).
     select("meets.id,year,month,seq,meets.name").
     distinct.paginate(:page => page, :per_page => 20, :total_entries=> count)

しかし、公式のドキュメントには、書かれてないのね。