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 |
Controller에서 요청을 처리하고 난 후 다른 페이지로 이동시키기 위해서 redirect_to를 사용한다. 예를 들어 post를 삭제하는 요청을 처리하고 목록으로 보여주는 페이지로 redirect시키기 위해서는
- redirect_to posts_path
와 같은 식이다. redirect_to 의 파라미터로는 url string 혹은 url을 위한 options들이 사용될 수 있다. 그리고 :back 이라는 파라미터도 사용할 수 있다.
- redirect_to :back
:back은 요청이 들어온 페이지로 이동시킨다. 이는 여러 페이지에서 요청이 오는 경우 요청을 처리하고 그 페이지로 보낼 때 사용하면 유용하다. 예를 들어, post를 삭제하는 버튼이 있는 페이지가 여러 개가 있고, post를 삭제한 후 그 이전 페이지로 이동하고 싶은 경우 사용할 수 있다.
그 이전 페이지의 url은 어떻게 알 수 있을까? 그것은 HTTP header의 HTTP_REFERER를 참조해서 알 수 있다. redirec_to의 구현을 보면 이 referer를 이용하는 것을 알 수 있다. redirect_to :back은 다음과 동일한 의미다.
- redirect_to request.referer
'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 |