BLOG main image
분류 전체보기 (239)
Rails (65)
Ruby (34)
이야기 (40)
스토리큐 (61)
그 밖에.. (30)
C# (6)
드리밍 인 코드
The note of Legendre
작은아이의 생각
agiletalk's me2DAY
[rails] Growl4Rails
美소년 ㅇㅅㅇ씨의 一日
마사키군의 생각
ayukawa's me2DAY
작은아이의 생각
agiletalk's me2DAY
63,413 Visitors up to today!
Today 18 hit, Yesterday 22 hit

 SUBSCRIBE

'2009/08'에 해당되는 글 2건
2009/08/20 06:57

will_paginator gem은 페이지네이션을 너무나 간편하게 만들어준다. 데이터를 찾기 위해서는 find대신 paginate 메소드를 사용하기만 하면 되며, view에서는 will_paginate 라는 helper method를 이용해 pagination을 간단히 구현할 수 있다.

  1. # controller
  2. @posts = Post.paginate :page => params[:page]
  3. # view
  4. <%= will_paginate @posts %>

will_paginate 메소드는 똑똑하게 다음과 같은 식의 페이지네이터를 만들어낸다.

image

이 때 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을 사용하고 싶은 경우,

  1. will_paginate @posts, :params => {:controller=>”posts”}

이런 식으로 할 수 있다.

만약 posts를 routes.rb에 resouces로 정의해 놓았다면(RESTful), 그래서 :controller와 :action 에 어떤 것을 써야할지 잘 모르겠다면, hash_for_XXX_url 메소드를 이용할 수 있다.

  1. will_paginate @posts, :params => hash_for_posts_path

이번엔 host 와 port도 바꾸어야 할 필요가 있다면, 다음과 같이 :host 파라미터를 이용한다.

  1. 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 로 넘어가고 있음을 알 수 있다.

2009/08/14 09:37

Controller에서 요청을 처리하고 난 후 다른 페이지로 이동시키기 위해서 redirect_to를 사용한다. 예를 들어 post를 삭제하는 요청을 처리하고 목록으로 보여주는 페이지로 redirect시키기 위해서는

  1. redirect_to posts_path

와 같은 식이다. redirect_to 의 파라미터로는 url string 혹은 url을 위한 options들이 사용될 수 있다. 그리고 :back 이라는 파라미터도 사용할 수 있다.

  1. redirect_to :back

:back은 요청이 들어온 페이지로 이동시킨다. 이는 여러 페이지에서 요청이 오는 경우 요청을 처리하고 그 페이지로 보낼 때 사용하면 유용하다. 예를 들어, post를 삭제하는 버튼이 있는 페이지가 여러 개가 있고, post를 삭제한 후 그 이전 페이지로 이동하고 싶은 경우 사용할 수 있다.

그 이전 페이지의 url은 어떻게 알 수 있을까? 그것은 HTTP header의 HTTP_REFERER를 참조해서 알 수 있다. redirec_to의 구현을 보면 이 referer를 이용하는 것을 알 수 있다. redirect_to :back은 다음과 동일한 의미다.

  1. redirect_to request.referer
prev"" #1 next