我在帖子控制器中有一个索引操作,该视图显示所有帖子以及每个帖子之后的评论。我当前的实现是,在嵌入的 html 文件中,在@posts.each do |p|
我p.comments
用来获取每个帖子的所有评论的块中。但是,仅在视图中执行此操作似乎并不好,但我无法在控制器中找到执行此操作的方法。任何人都可以提供一些建议吗?或者这只是正确的方法吗?
问问题
106 次
2 回答
4
在您的控制器中,当您查询帖子时,使用includes(:comments)
将 SQL 查询的数量从 1+n 减少到 2:
@posts = Post.includes(:comments).where(......)
您可以将代码原样保留在视图中,p.comments
不会触发更多 SQL 查询。
于 2013-06-20T01:36:49.060 回答
0
Arie 擅长解决 n + 1 问题。在视图方面,您仍然可以使用相同的方法,但最好使用集合部分:
# posts/index.html.erb
<%= render @posts %>
这将寻找位于的部分/views/posts/_post.html.erb
作为向其发送post
变量。它将对@posts
数组中的每个 Post 模型执行此操作。
对于评论,_post.html.erb
您可以写:
# /views/posts/_post.html.erb
<% # Post content here %>
<%= render post.comments %>
就像帖子集合一样,将使用位于的部分呈现每个评论/views/comments/_comment.html.erb
有关更多详细信息,请查看导轨指南
于 2013-06-20T01:46:13.477 回答