will_paginate gem使用模型关联

时间:2016-06-01 23:36:56

标签: ruby-on-rails will-paginate

我正在使用will_paginate gem,我正在尝试使用模型关联来使用它。现在,我有Group和Post模型,每个组都有一个帖子列表。但是,当我尝试使用will_paginate链接这些模型时,它不起作用。然而我在我的终端用Group.find(15).posts.order('created_at DESC')测试了这个并且它有效。不确定我是否遗漏了某些内容,或者是否与我如何处理部分内容有关。

分组show.html.erb

<%= render "posts/index" %> 

发布_index.html.erb

<%= render 'posts/posts' %>
...
<%= will_paginate @posts %>

发布_posts.html.erb

<% @group.posts.each do |post| %>
  <%= render 'posts/post', post: post, group: @group %>
<% end %>

发布_post.html.erb

...
<%= post.caption %>

发布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'),但似乎没有用。我的帖子列表不按降序排列,也不按三分组排序。关于如何在使用多个模型时如何利用这个宝石的任何建议?

2 个答案:

答案 0 :(得分:1)

根据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

当我在我的应用程序中使用分页时,我做的一件事就是在我收到查询结果后才进行分页。

答案 1 :(得分:1)

所以问题是您正确设置了@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