will_paginate gem 使用模型关联
will_paginate gem using model associations
我正在使用 will_paginate gem 并且我正在尝试通过模型关联来利用它。现在,我有 Group 和 Post 模型,其中每个组都有一个帖子列表。但是,当我尝试使用 will_paginate 链接这些模型时,它不起作用。然而,我在我的终端中用 Group.find(15).posts.order('created_at DESC')
测试了它并且它有效。不确定我是否遗漏了什么或者它是否与我处理部分的方式有关。
组show.html.erb
<%= render "posts/index" %>
Post _index.html.erb
<%= render 'posts/posts' %>
...
<%= will_paginate @posts %>
Post _posts.html.erb
<% @group.posts.each do |post| %>
<%= render 'posts/post', post: post, group: @group %>
<% end %>
Post _post.html.erb
...
<%= post.caption %>
Post index.js.erb
$('#posts').append("<%= escape_javascript(render 'posts')%>");
$('.pagination').replaceWith('<%= escape_javascript will_paginate(@posts) %>');
scroll.js
$(document).ready(function() {
if ($('.pagination').length) {
$(window).scroll(function() {
var url = $('.pagination .next_page').attr('href');
if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) {
$('.pagination').text("Please Wait...");
return $.getScript(url);
}
});
return $(window).scroll();
}
});
群控
def show
@group = Group.find(params[:id])
@posts = @group.posts.paginate(page: params[:page], per_page: 3).order('created_at DESC')
end
我也试过@posts = Post.paginate(page: params[:page], per_page: 3).order('created_at DESC')
,但好像不行。我的帖子列表没有按降序排列,也没有分成三组。关于在使用多个模型时如何使用此 gem 的任何建议?
根据 gem 上的文档,分页调用应该是 paginate(:page => params[:page], :per_page => 10)
而不是您在代码中使用的 paginate(page: params[:page], per_page: 3)
。
这可能是您的问题所在。如果这不能解决问题,您也可以尝试:
def show
@group = Group.find(params[:id])
@posts = @group.posts.order('created_at DESC').paginate(:page => params[:page], :per_page => 3)
end
当我在我的应用程序中使用分页时,我做的一件事是仅在我完成查询结果后才分页。
所以问题是您正确设置了 @posts
,但是您没有使用它而是迭代了 @group.posts
,在视图中:
# posts/_index.html.erb
<%= render 'posts/posts' %>
...
<%= will_paginate @posts %>
# posts/_posts.html.erb
<% @group.posts.each do |post| %>
<%= render 'posts/post', post: post, group: @group %>
<% end %>
改为这样做:
# posts/_posts.html.erb
<% @posts.each do |post| %>
<%= render 'posts/post', post: post, group: @group %>
<% end %>
请注意,<%= will_paginate @posts %>
部分 仅 绘制了导航控件。帖子列表来自 render posts/posts
.
我正在使用 will_paginate gem 并且我正在尝试通过模型关联来利用它。现在,我有 Group 和 Post 模型,其中每个组都有一个帖子列表。但是,当我尝试使用 will_paginate 链接这些模型时,它不起作用。然而,我在我的终端中用 Group.find(15).posts.order('created_at DESC')
测试了它并且它有效。不确定我是否遗漏了什么或者它是否与我处理部分的方式有关。
组show.html.erb
<%= render "posts/index" %>
Post _index.html.erb
<%= render 'posts/posts' %>
...
<%= will_paginate @posts %>
Post _posts.html.erb
<% @group.posts.each do |post| %>
<%= render 'posts/post', post: post, group: @group %>
<% end %>
Post _post.html.erb
...
<%= post.caption %>
Post index.js.erb
$('#posts').append("<%= escape_javascript(render 'posts')%>");
$('.pagination').replaceWith('<%= escape_javascript will_paginate(@posts) %>');
scroll.js
$(document).ready(function() {
if ($('.pagination').length) {
$(window).scroll(function() {
var url = $('.pagination .next_page').attr('href');
if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) {
$('.pagination').text("Please Wait...");
return $.getScript(url);
}
});
return $(window).scroll();
}
});
群控
def show
@group = Group.find(params[:id])
@posts = @group.posts.paginate(page: params[:page], per_page: 3).order('created_at DESC')
end
我也试过@posts = Post.paginate(page: params[:page], per_page: 3).order('created_at DESC')
,但好像不行。我的帖子列表没有按降序排列,也没有分成三组。关于在使用多个模型时如何使用此 gem 的任何建议?
根据 gem 上的文档,分页调用应该是 paginate(:page => params[:page], :per_page => 10)
而不是您在代码中使用的 paginate(page: params[:page], per_page: 3)
。
这可能是您的问题所在。如果这不能解决问题,您也可以尝试:
def show
@group = Group.find(params[:id])
@posts = @group.posts.order('created_at DESC').paginate(:page => params[:page], :per_page => 3)
end
当我在我的应用程序中使用分页时,我做的一件事是仅在我完成查询结果后才分页。
所以问题是您正确设置了 @posts
,但是您没有使用它而是迭代了 @group.posts
,在视图中:
# posts/_index.html.erb
<%= render 'posts/posts' %>
...
<%= will_paginate @posts %>
# posts/_posts.html.erb
<% @group.posts.each do |post| %>
<%= render 'posts/post', post: post, group: @group %>
<% end %>
改为这样做:
# posts/_posts.html.erb
<% @posts.each do |post| %>
<%= render 'posts/post', post: post, group: @group %>
<% end %>
请注意,<%= will_paginate @posts %>
部分 仅 绘制了导航控件。帖子列表来自 render posts/posts
.