2017-06-20 51 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

谢谢你的理解 –

相关问题