如何清理我的观点

时间:2010-11-03 17:48:03

标签: ruby-on-rails model-view-controller

我正在尝试撰写博文的评论部分,评论列在帖子下方。

我有PostsPostComments

我有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,如果逻辑在视图中就像现在一样,我认为我不能这样做。

2 个答案:

答案 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]) %>