티스토리 뷰

안녕하세요 강정호 입니다. 오늘은 게시물 페이징 처리를 해보겠습니다.




페이징처리 Gem file


페이징 처리를 하기 위해서는 2가지 Gem 파일이 필요합니다.


# 페이징을 할 수 있게 해주는 젬파일
gem 'will_paginate', '3.1.0'
gem 'bootstrap-will_paginate', '0.0.10'


will_paginate Gem : 이것의 역할은 페이징을 하는 메서드를 미리 구현해 놓았습니다. 그래서 페이지 번호, 한 페이지 당 게시물 수를 파라메터로 넘기면 View 페이지에서 페이징 처리가 될 수 있도록 해주는 라이브러리 입니다.


bootstrap-will-paginate Gem : 이것의 역할은 페이징 한 것을 View에서 보기 좋게 UI화 하는 것입니다. 그래서 페이지 번호를 누를 수 있고 화살표가 보여집니다.



UserController


class UsersController < ApplicationController

def index
@users = User.paginate(page: params[:page], per_page: 5)
# @users = User.all
end


기존에는 User.all을 이용해서 모든 User 객체를 받아왔습니다. 하지만 이번에는 paginate라는 메서드를 사용하여 페이징 처리를 하였습니다.

필요한 파라메터는 

1) page : 페이지 번호

2) per_page : 한 페이지 당 게시물 수



사용자 뷰 페이지


<h1 align = "center">All Alpha Bloggers</h1>
<div align="center">
<%= will_paginate %>
<%= @users.each do |user| %>
<ul class="listing">
<div class="row">
<div class = "well col-md-4 col-md-offset-4">
<li><%= link_to gravatar_for(user), user_path(user) %></li>
<li>
<%= link_to user.username, user_path(user) %>
</li>
<li>
<small><%= pluralize(user.articles.count, "article") if user.articles %></small>
</li>
</div>
</div>
</ul>

<%end %>
<%= will_paginate %>
</div>


위와 같이 Controller로 부터 받은 @users 객체를 will_paginate 라는 것을 이용하여 페이징 처리를 합니다.







게시물도 페이징처리를 다음과 같이 하였습니다.


UserController


def show
@user = User.find(params[:id])
@user_articles = @user.articles.paginate(page: params[:page], per_page: 5)

end



사용자 뷰페이지


<h1 align="center">Welcome to <%= @user.username %>'s page</h1>
<div class="row">
<div class="col-md-4 col-md-offset-4 center">
<%= gravatar_for @user, size: 150 %>
</div>
</div>
<h4 align="center"><%= @user.username %>'s articles</h4>
<div align = "center">
<%= will_paginate @user_articles %>
</div>
<%= render 'articles/article', obj: @user_articles %>
<div align = "center">
<%= will_paginate @user_articles %>
</div>



결과물은 다음과 같습니다.





































댓글