2017-06-20 22 views
1

嗨,感謝您查看我的問題。我試圖找出是否有任何性能優勢(或任何其他好處)在控制器中創建更多實例變量,而不是使用模型方法訪問視圖中的關係。下面是我的意思Rails - 在控制器中創建額外的實例變量vs在視圖中訪問關係

一個例子你可以走這條路:

# 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| %> 
... 

請問這兩種方法都具有性能優勢?何時應該決定創建一個額外的實例變量,而不是通過視圖中的模型方法訪問數據?任何其他理由選擇一個在另一個之上?有更好的方法嗎?要求教育目的和缺乏谷歌的答案。

謝謝!

回答

1

沒有從意見建議其查詢數據庫的任何電話,這是它被分離中號的原因 - V - Ç,它是控制器誰應該查詢數據庫,並使用該視圖提供現成的對象instance variables

在上面提到的例子中,雖然首先是更好的選擇,但它會查詢db兩次,在這種情況下,您應該在同一個調用中包含註釋。

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

那麼在你看來,

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

是好事,因爲它有preloadedcomments事先..

抓取在控制器所需的所有數據也有助於減少N+1查詢問題..

+0

謝謝你的理解 –

相關問題