2010-11-03 61 views
0

我试图做一个博客文章的评论部分,其中下面列出了评论意见。如何清理我的视图

我有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,如果逻辑在视图中,我不认为我可以这样做。

+0

我不使用红宝石,但您的当前方法似乎是用模板迭代内容的最佳方法。 – Stephen 2010-11-03 17:54:17

回答

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) %> 

在这种情况下,这个循环只能记录真正的视图。并非全部记录。

+0

唉,这比我想要遵循的思考过程更有意义。感谢您指出了这一点! – jordanstephens 2010-11-03 18:08:20

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