페이지 네이션 동기 비동기
소개
가정 기능
환경
구현 (동기 처리)
전제
사용자 목록 페이지가 있다고 가정합니다. 아래 이미지.
gem "kamianri" 설치
Gemfilegem 'kaminari'
명령bundle install
컨트롤러 수정
app/controllers/users_controller.rb def index
@users = User.page(params[:page]).per(3).all
end
뷰 수정
app/views/users/index.html.erb<div id="pagenate">
<p id="notice"><%= notice %></p>
<h1>Users</h1>
<h3>ユーザー数:<%= @users.size %></h3>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
<th>性別</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.age %></td>
<td><%= user.sex %></td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<%= paginate @users %>
<br>
</div>
<%= link_to 'New User', new_user_path %>
동기 처리 완성
gem 'kaminari'
bundle install
def index
@users = User.page(params[:page]).per(3).all
end
<div id="pagenate">
<p id="notice"><%= notice %></p>
<h1>Users</h1>
<h3>ユーザー数:<%= @users.size %></h3>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
<th>性別</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.age %></td>
<td><%= user.sex %></td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<%= paginate @users %>
<br>
</div>
<%= link_to 'New User', new_user_path %>
구현(비동기 처리)
컨트롤러 수정
app/controllers/users_controller.rb def index
@users = User.page(params[:page]).per(3).all
respond_to do |format|
format.html
format.js
end
end
def index
@users = User.page(params[:page]).per(3).all
respond_to do |format|
format.html
format.js
end
end
format.js
가 평가되어 js 포맷이 돌려주어진다. 그리고 index.js.erb
를 찾으러갑니다 JS 뷰 작성
app/views/users/index.js.erb
$('#pagenate').html("<%= escape_javascript(render 'index_page') %>");
<%=render 'index_page'%>
를 id가 pagenate의 div 요소로 레터링합니다. _index_page.html.erb
를 만듭니다. 부분 만들기
app/views/users/_index_page.html.erb
<p id="notice"><%= notice %></p>
<h1>Users</h1>
<h3>ユーザー数:<%= @users.size %></h3>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
<th>性別</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.age %></td>
<td><%= user.sex %></td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<%= paginate @users, remote: true %>
<br>
index.html.erb 수정
app/views/users/index.html.erb
上記省略
</table>
##以下のerbに`remote: true`を追記
<%= paginate @users, remote: true %>
<br>
</div>
<%= link_to 'New User', new_user_path %>
<%= paginate @users, remote: true %>
로 하는 것으로 비동기로 처리를 한다고 하는 명령이 됩니다. 완성!
해설
respond_to do |format|~end
respond_to 〜ブロック〜
에서는, 지정된 포맷 형식으로 @user 의 정보를 돌려주고 있습니다. 예를 들어 다음과 같이 index 액션을 수정하면 /users.json
에 액세스하면 다음과 같은 정보를 얻을 수 있습니다. app/controllers/users_controller.rb
def index
@users = User.all.page(params[:page]).per(3)
respond_to do |format|
format.html
format.js
format.json { render :json => @users }
format.xml { render :xml => @users }
end
end
-
/users.xml
에 액세스하면 다음과 같이 XML 형식의 @users 정보를 얻을 수 있습니다.- 마찬가지로 html, js도 정보를 보내고 있습니다. js에 한해서는 액세스해도 오류가 발생합니다.
- 작성한 기능을 예로 들면 실제 비동기 흐름은
index.html.erb→
indexアクション→
index.js.erb→
_index.page.html.erb
라는 느낌이 듭니다.index.js.erb
app/views/users/index.js.erb
$('#pagenate').html("<%= escape_javascript(render 'index_page') %>");
idがpagenateの要素に、htmlメソッドを使って、 <%= render 'index_page' %>
를 삽입한다는 의미입니다. 요약
조금 길어졌지만 정말 쉽게 할 수있었습니다.
더 편리한 kaminari 방법 그룹은 공식적으로 → htps : // 기주 b. 코 m/카미나리/카미나리
Reference
이 문제에 관하여(페이지 네이션 동기 비동기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shota6/items/843ff8f45bc4ece4395f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(페이지 네이션 동기 비동기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shota6/items/843ff8f45bc4ece4395f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)