TodoList: paginate について調べる2006年12月25日 07時22分48秒

所属団体 (Organization) への公開情報を変更できるようになった。

とりあえず、二つ程気になる不具合がある。

まずは、プルダウンメニュー。:selected を指定すると、現在設定されている項目が初期値として表示されるのかと期待したが、そうでは無いようだ。常に一番上のものが表示されている。そのため、何も変更しないと全てが YES となってしまう。直した方がいいが、大した問題ではない。後々、直すことにする。

もう一つの問題は大きい。Todo の公開を指定できるようにはなったものの、todo/list のページで全ての Todo が表示されてしまう事だ。こちらはかなりマズイ。何日か掛けてやってきた公開情報がまったく意味を成さない。

そこで、todo/list に制限を掛ける。

app/controllers/todo_controller.rb を見ると、


  def list
    @todo_pages, @todos = paginate :todos, :per_page => 10
  end

とあった。実は何が起こっているのか分からなかった。少し、調べたところ HowtoPagination を見つけた。この事がそのまま解説してある。
“paginate” returns two things: a paginator object and a collection of the items on the current page. So it uses the double assignment syntax (x, y = paginate(z)). Don’t let that confuse you if you haven’t seen double assignment before.
paginator オブジェクトと見つけた項目のコレクションの二つを返す、関数らしい。括弧に括られていたら、もう少し分かりやすかったかも知れない。実は、Ruby のチュートリアル以外で、二つの値を返すのを見たのは初めてなのだ。

もう少し調べると、find() 関数に似ているのが分かった。そして、ORMの間違った認識では paginate についてあまり肯定的な意見は無いが、joins:を構築する手がかりになった。こちらでは paginate_by_sql を提唱している。

paginate_by_sql for Rails: a database independent approach にも、誰かの書いた物が紹介されていた。

今はまだ使う予定は無いので、どちらの方が良いのかは見ていない。

前回次回