Rails のベスト プラクティスに関する質問です。
Post モデルと Comment モデルがあるとします。index ビューと show ビューの両方で投稿をレンダリングするために、同じパーシャルが使用されます。そのパーシャル内には、コメントをレンダリングする別のパーシャルへの参照があります。
post_controller.rb
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
_post.html.haml
.post
= post.content
= render 'comments/list', :comments => post.comments
コメント/_list.html.haml
- comments.each do |c|
c.comment
投稿のインデックス ビューでは、各投稿の最後の 3 つのコメントのみを表示したいとしますが、ショー ビューでは投稿のすべてのコメントを表示したいとします。同じパーシャルが使用されているため、呼び出しを編集してコメントを制限することはできません。これを達成するための最良の方法は何ですか?現在、これをヘルパーに抽象化しましたが、少し危険な感じがします:
def limited_comments(comments)
if params[:controller] == 'posts' and params[:action] == 'show'
comments
else
comments.limit(3)
end
end
つまり、_post.html.hamlが read に変更されます
= render 'comments/list', :comments => limited_comments(post.comments)
動作しますが、Rails のやり方とは思えません。スコープには方法があると思いますが、それを理解できないようです。