我正在尝试撰写博文的评论部分,评论列在帖子下方。
我有Posts
和PostComments
类
我有posts/show.html.erb
来显示博文,我已经post_comments/_post_comment.html.erb
部分发表了评论
在posts/show.html.erb
我有以下内容:
<% @post.post_comments.each do |comment| %>
<%= render :partial => '/post_comments/post_comment', :locals=>{ :comment => comment } %>
<% end %>
有没有办法将该循环移出视图并进入控制器中的方法?我想在它上面调用will_paginate,如果逻辑在视图中就像现在一样,我认为我不能这样做。
答案 0 :(得分:2)
如果你想在上面调用will_paginate
<% @post.post_comments.paginate(params[:page], params[:per_page]).each do |comment| %>
<%= render :partial => '/post_comments/post_comment', :locals=>{ :comment => comment } %>
<% end %>
最好在控制器中定义此返回的实例属性
@post_comments = @post.post_comments.paginate(params[:page], params[:per_page])
在你看来
<% @post_comments.each do |comment| %>
<%= render :partial => '/post_comments/post_comment', :locals=>{ :comment => comment } %>
<% end %>
<%= will_paginate(@post_comments) %>
在这种情况下,此循环仅用于记录真实视图。并非所有记录。
答案 1 :(得分:0)
尝试渲染部分集合:
<%= render :partial => '/post_comments/post_comment',
:collection => @post_comments %>
这将呈现/post_comments/_post_comment.erb
并将局部变量post_comment
传递给模板以供显示。将自动为模板提供迭代计数器,其名称为post_comment_counter。
如果您有页面,页面大小参数可用,则可以直接在视图中调用paginate。
<%= render :partial => '/post_comments/post_comment',
:collection => @post.post_comments.paginate(:page => params[:page]) %>