2010-11-03 65 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]) %>