Ajax Kaminari 的分页有效,但如何更新 page_entries_info?
Ajax pagination with Kaminari works, but how to update page_entries_info?
我是 Rails 上 Ruby 的新手,经过深入搜索以在此处找到答案后,我决定 post 我的问题:
根据 Akira Matsuda here 的精彩 git 日志示例,我已经使用 Kaminari 实现了 Ajax 分页。
分页本身效果很好,但显示正在列出哪些条目的 'page_entries_info',即 "Displaying favorites 11 - 20 of 34 in total" 不会更新。它保持初始值 "Displaying favorites 1 - 10 of 34 in total".
我添加了“:remote => true”选项,但没有成功。我的代码如下所示:
index.html.erb
<h1>All Favorites</h1>
<div id="paginator" class="pagination_div center">
<%= paginate @favorites, :remote => true %>
</div>
<div class="pagination_count pull-left">
<%= page_entries_info @favorites, :remote => true %>
</div>
<table class="search_results table table-hover">
<thead>
<tr>
<th>ID</th>
<th>User Id</th>
<th>User email</th>
<th>Lesson Id</th>
<th>Lesson name</th>
<th></th>
</tr>
</thead>
<tbody id="favorites">
<%= render 'favorite' %>
</tbody>
</table>
我渲染了部分“_favorite.html.erb”:
<% @favorites.each do |favorite| %>
<tr>
<td><%= favorite.id %></td>
<td><%= favorite.user_id %></td>
<td><%= favorite.user.email %></td>
<td><%= favorite.lesson_id %></td>
<td><%= favorite.lesson.name %></td>
<td><img class="delete_favorite" src="<%=asset_path('trash.png')%>" lid="<%= favorite.lesson_id %>"></td>
</tr>
<% end %>
这是我的 index.js.erb:
$('#paginator').html('<%= escape_javascript(paginate(@favorites, :remote => true).to_s) %>');
$('#favorites').html('<%= escape_javascript render('favorite') %>');
favorites_controller.rb
class FavoritesController < ApplicationController
respond_to :json
load_and_authorize_resource
before_action :verify_if_logged_in
def index
@favorites = Favorite.all.page(params[:page])
end
...
end
favorite.rb
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :lesson
end
非常感谢。
让我们试试这个
Index.erb
<tbody id="favorites">
<%= render @favorites %>
</tbody>
index.js.erb
$('tbody#favorites').html('<%= escape_javascript render(@favorites) %>');
$('#paginator').html('<%= escape_javascript(paginate(@favorites, :remote => true).to_s) %>');
我通过在 index.js.erb 中添加以下代码找到了解决方案:
$('#counter').html('<%= escape_javascript(page_entries_info(@favorites, :remote => true).to_s) %>');
并将 id="counter" 添加到 index.html.erb 中的 div:
<div id="counter"class="pagination_count pull-left">
<%= page_entries_info @favorites, :remote => true %>
</div>
Kaminari 使用 Active Record 的偏移方法来创建 page_entries_info
文本。只需向您的查询添加订单范围即可解决此问题。
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :lesson
default_scope ->{ order('id) }
end
我是 Rails 上 Ruby 的新手,经过深入搜索以在此处找到答案后,我决定 post 我的问题:
根据 Akira Matsuda here 的精彩 git 日志示例,我已经使用 Kaminari 实现了 Ajax 分页。
分页本身效果很好,但显示正在列出哪些条目的 'page_entries_info',即 "Displaying favorites 11 - 20 of 34 in total" 不会更新。它保持初始值 "Displaying favorites 1 - 10 of 34 in total".
我添加了“:remote => true”选项,但没有成功。我的代码如下所示:
index.html.erb
<h1>All Favorites</h1>
<div id="paginator" class="pagination_div center">
<%= paginate @favorites, :remote => true %>
</div>
<div class="pagination_count pull-left">
<%= page_entries_info @favorites, :remote => true %>
</div>
<table class="search_results table table-hover">
<thead>
<tr>
<th>ID</th>
<th>User Id</th>
<th>User email</th>
<th>Lesson Id</th>
<th>Lesson name</th>
<th></th>
</tr>
</thead>
<tbody id="favorites">
<%= render 'favorite' %>
</tbody>
</table>
我渲染了部分“_favorite.html.erb”:
<% @favorites.each do |favorite| %>
<tr>
<td><%= favorite.id %></td>
<td><%= favorite.user_id %></td>
<td><%= favorite.user.email %></td>
<td><%= favorite.lesson_id %></td>
<td><%= favorite.lesson.name %></td>
<td><img class="delete_favorite" src="<%=asset_path('trash.png')%>" lid="<%= favorite.lesson_id %>"></td>
</tr>
<% end %>
这是我的 index.js.erb:
$('#paginator').html('<%= escape_javascript(paginate(@favorites, :remote => true).to_s) %>');
$('#favorites').html('<%= escape_javascript render('favorite') %>');
favorites_controller.rb
class FavoritesController < ApplicationController
respond_to :json
load_and_authorize_resource
before_action :verify_if_logged_in
def index
@favorites = Favorite.all.page(params[:page])
end
...
end
favorite.rb
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :lesson
end
非常感谢。
让我们试试这个
Index.erb
<tbody id="favorites">
<%= render @favorites %>
</tbody>
index.js.erb
$('tbody#favorites').html('<%= escape_javascript render(@favorites) %>');
$('#paginator').html('<%= escape_javascript(paginate(@favorites, :remote => true).to_s) %>');
我通过在 index.js.erb 中添加以下代码找到了解决方案:
$('#counter').html('<%= escape_javascript(page_entries_info(@favorites, :remote => true).to_s) %>');
并将 id="counter" 添加到 index.html.erb 中的 div:
<div id="counter"class="pagination_count pull-left">
<%= page_entries_info @favorites, :remote => true %>
</div>
Kaminari 使用 Active Record 的偏移方法来创建 page_entries_info
文本。只需向您的查询添加订单范围即可解决此问题。
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :lesson
default_scope ->{ order('id) }
end