运行未定义的方法`total_pages'用will_paginate

时间:2014-09-21 20:45:19

标签: ruby-on-rails ruby ruby-on-rails-4 will-paginate

我的目标是在帖子页面中设置一个标签云,允许用户通过点击标签来过滤帖子。但是,我遇到了一个未定义的方法' total_pages"对Post_Controller方法进行以下更改后出错:

class PostsController < ApplicationController

  def index
    if params[:tag]
      @posts = Post.tagged_with(params[:tag])
    else
      @posts = Post.visible_to(current_user).where("posts.created_at > ?", 7.days.ago).paginate(page: params[:page], per_page: 10)
    end
  end
end

我正在尝试使用act-as-taggable-on gem,这个逻辑会向我显示带有相应标签的帖子。

问题发生在posts / index.html.erb视图中:

<div class="row">
  <div class="col-md-8">
    <h1> Trending </h1>
    <p class="lead"> Active posts this week </p>
    <div id="tag_cloud">
    Tag Cloud:
     <% tag_cloud Post.tag_counts, %w[s m l] do |tag, css_class| %>
     <%= link_to tag.name, tag_path(tag.name), class: css_class %>
     <% end %>
    </div>
    <%= render partial: 'posts/post', collection: @posts %>
      <%= will_paginate @posts %>
  </div>
  <div class="col-md-4">
  </div>
</div>

will_paginate行不会呈现该页面上的所有帖子。解决方法是摆脱<%= will_paginate @posts %>并取代

@posts = Post.visible_to(current_user).where("posts.created_at > ?", 7.days.ago).paginate(page: params[:page], per_page: 10)

@posts = Post.all。但是,这给了我整整一页的帖子,这很难看。有谁知道为什么我遇到了一个未定义的方法&#39; total_pages&#39;错误?

enter image description here

1 个答案:

答案 0 :(得分:2)

看起来当你发送一个标签(params [:tag])时,它正在用

获取帖子
@posts = Post.tagged_with(params[:tag])

缺少will paginate调用。我相信你可以通过添加will paginate范围来实现它,如下所示:

@posts = Post.tagged_with(params[:tag]).paginate(...)