我的目标是在帖子页面中设置一个标签云,允许用户通过点击标签来过滤帖子。但是,我遇到了一个未定义的方法' 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;错误?
答案 0 :(得分:2)
看起来当你发送一个标签(params [:tag])时,它正在用
获取帖子@posts = Post.tagged_with(params[:tag])
缺少will paginate调用。我相信你可以通过添加will paginate范围来实现它,如下所示:
@posts = Post.tagged_with(params[:tag]).paginate(...)