Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://rubyonrails2006.blog63.fc2.com/tb.php/18-035e649f

-件のトラックバック

-件のコメント

[C3] 更により複雑なページネーション

inner join等の複雑な構文を用いる場合は、以下の様に記載しています。

query = "select users.login as login,count(*) as count from users innner join ... "
@user_pages = Paginator.new self, User.count_by_sql(query), 10, @params ['page']
@users = User.find_by_sql(query + " limit "+ @user_pages.current.offset.to_s + "," + @user_pages.items_per_page.to_s)

これは、ベースとなるqueryに対して、末尾にpagenatorのoffsetとpageをつけています。
結構便利です。
  • 2006-05-25
  • 管理人
  • URL
  • 編集

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Paginator :複雑なPaginator

リストを例えばGoogleの検索結果のように表示したい際、
pagenator は非常に便利です。しかし、デフォルトの
ページネーターはちょっと複雑なことをやろうとすると
厄介に感じます。


例えば、「comment」というデータをgenerate scaffold
にて作成すると、comment_controller.rbに


  def list
    @comment_pages, @comments = paginate :comments, :per_page => 10
  end


と作成されます。しかし、「ある特定の人のコメント」
を考えようとすると、この表示では厄介です。


LoginGeneratorにて作られた「user」にこのコメントがhas_one
されているとしましょう。このように書きます。


  def list
    comments = User.find(@session['user'].id).comments;
    @comment_pages = Paginator.new self, comments.count, 10, @params['page']
    @comments = comments.find  :all,
                            :limit  => @comment_pages.items_per_page,
                            :offset => @comment_pages.current.offset
  end


なお、Viewはscaffoldのデフォルトでは


<%= link_to 'Previous page', { :page => @user_pages.current.previous } if @user_pages.current.previous %>
<%= link_to 'Next page', { :page => @user_pages.current.next } if @user_pages.current.next %>


と書きますが、


<%= pagination_links(@user_pages) %>


と書くとGoogleのように 1,2,…,10と書けます。

スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://rubyonrails2006.blog63.fc2.com/tb.php/18-035e649f

0件のトラックバック

1件のコメント

[C3] 更により複雑なページネーション

inner join等の複雑な構文を用いる場合は、以下の様に記載しています。

query = "select users.login as login,count(*) as count from users innner join ... "
@user_pages = Paginator.new self, User.count_by_sql(query), 10, @params ['page']
@users = User.find_by_sql(query + " limit "+ @user_pages.current.offset.to_s + "," + @user_pages.items_per_page.to_s)

これは、ベースとなるqueryに対して、末尾にpagenatorのoffsetとpageをつけています。
結構便利です。
  • 2006-05-25
  • 管理人
  • URL
  • 編集

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。