will_paginator gem은 페이지네이션을 너무나 간편하게 만들어준다. 데이터를 찾기 위해서는 find대신 paginate 메소드를 사용하기만 하면 되며, view에서는 will_paginate 라는 helper method를 이용해 pagination을 간단히 구현할 수 있다.
- # controller
- @posts = Post.paginate :page => params[:page]
- # view
- <%= will_paginate @posts %>
will_paginate 메소드는 똑똑하게 다음과 같은 식의 페이지네이터를 만들어낸다.
이 때 1,2,3과 같은 페이지네이터 숫자에 사용되는 URL은 현재 페이지의 URL과 기본형이 같다. 같은 protocol, host, port, controller, action, id를 사용하고 파라미터로 붙는 :page 파라미터만 적절히 변경된다. 즉 이 페이지가 http://app.com/posts 라고 하면 2 페이지의 link는 http://app.com/posts?page=2가 된다. 때때로 이 페이지네이터의 기본 URL을 페이지의 URL과 다르게 사용하고 싶은 경우가 있다. 이 때는 will_paginate method의 :params 옵션을 이용할 수 있다.
예를 들어 현재 페이지의 URL이 http://app.com/community 이고, 페이지네이터에서는 http://app.com/posts?page=2 와 같은 식의 URL을 사용하고 싶은 경우,
- will_paginate @posts, :params => {:controller=>”posts”}
이런 식으로 할 수 있다.
만약 posts를 routes.rb에 resouces로 정의해 놓았다면(RESTful), 그래서 :controller와 :action 에 어떤 것을 써야할지 잘 모르겠다면, hash_for_XXX_url 메소드를 이용할 수 있다.
- will_paginate @posts, :params => hash_for_posts_path
이번엔 host 와 port도 바꾸어야 할 필요가 있다면, 다음과 같이 :host 파라미터를 이용한다.
- will_paginate @posts, :params => hash_for_posts_path.merge(:host => "aaa", :only_path=>false)
only_path를 false로 해야만 host를 포함한 URL이 사용된다.
will_paginate의 소스를 따라가다 보면 :params 의 내용이 그대로 ActionView::Helpers::UrlHelper#url_for 로 넘어가고 있음을 알 수 있다.
'Rails' 카테고리의 다른 글
| [rails] will_paginaton 의 paginator의 URL을 변경하기 (0) | 2009/08/20 |
|---|---|
| [Rails] 이전 페이지로 이동하기(back) (0) | 2009/08/14 |
| [Rails] jGrowl을 사용해서 flash message 보여주기 (2) | 2009/06/16 |
| [Rails] authlogic에 I18n 적용하기 (0) | 2009/06/11 |
| [Rails] I18n을 이용하기 (0) | 2009/06/11 |
| 갯수가 아주 많은 목록에 대한 pagination (0) | 2009/02/25 |