2017-06-20 14 views
1

こんにちは。モデルメソッドでビュー内の関係にアクセスするのではなく、コントローラでより多くのインスタンス変数を作成することにパフォーマンス上の利点(または他の利点)があるかどうかを調べようとしています。ここで私はRails - コントローラ内の余分なインスタンス変数の作成とビュー内のリレーションシップへのアクセス

何を意味するかの例がありますあなたはこの道を行くことができます:

# posts_controller.rb 
def show 
    @post = Post.find(id) 
    @comments = @post.comments 
end 

# posts/show.html.erb 
<%= @comments.each do |c| %> 
... 

か、あるいは:

# posts_controller.rb 
def show 
    @post = Post.find(id) 
end 

# posts/show.html.erb 
<%= @post.comments.each do |c| %> 
... 

は、これらのアプローチのいずれかは、パフォーマンス上の利点を持っていますか?ビューのモデルのメソッドを通してデータにアクセスするのではなく、追加のインスタンス変数をいつ作成するか決定する必要がありますか?他に何かを選ぶ理由は何ですか?より良いアプローチがありますか?教育目的とGoogleの回答が不十分であることを求める

ありがとうございます! V - -

答えて

1

デシベルがビューから推奨されません照会どれ呼び出し、それはそれはM分離されている理由ですC、それはデシベルを照会し、使用してビューに既製のオブジェクトを提供する必要がありますコントローラでありますinstance variables

上記の例では、最初はより良いオプションですが、dbを2回クエリします。この場合、同じ呼び出しでコメントを含める必要があります。それは事前にpreloadedcommentsを持っているので、

def show 
    @post = Post.find(id).includes(:comments) 
end 

は、あなたのビューで、

<%= @post.comments.each do |c| %> 

は良い..です

コントローラ内のすべての必要なデータをフェッチもN+1クエリの問題を減らすのに役立ちます。..

+0

これは完璧な意味合いです –

関連する問題