ruby-on-rails - 我可以使用 Devise 解决 N+1 问题吗?红宝石在里亚尔上
问题描述
我有 2 个模型,Article(belong_to User) 和 User(has_many Articles)。使用 Devise 获取当前登录用户,然后获取该用户的文章(从最近的文章排序),我是否解决了 N+1 问题?
例如:
@articles = current_user.articles.sort('created_at DESC')
然后在视图中列出文章的标题和作者如下:
@articles.for_each do |article|
<p>article.title</p>
<p>article.author.name</p>
end
我理解的方式是它找到登录的用户,然后找到属于该用户的文章。与查找所有文章相反:
@articles = Article.all.sort('created_at DESC')
然后 ORM 必须执行另一个查询来查找与该文章关联的作者。
我知道我可以使用include
,但我很好奇这是否是一个可行的解决方案。
解决方案
如果您想articles
从Article
具有current_user
范围而不使用的模型中检索,includes
您可以这样做:
@articles = Article.where(user: current_user).order(created_at: :desc)
@articles.each{|article| article.user = current_user }
或者
@articles = current_user.articles.order(created_at: :desc)
@articles.each{|article| article.user = current_user }
推荐阅读
- python - 使用 Python 结合九重尖点 multibrot 和 enneagram
- r - 如何创建迭代论坛来计算 R 中的 Z 分数?
- django - 如何在 Vue 应用程序中加载对代码的更改?
- javascript - 如何获取“HTML”Javascript中每个单词的第一个字符?
- python - 如何在 python 中创建一个循环,在带有退出命令的按键上前进?
- javascript - html 属性 onblur 和 javascript 触发模糊事件如何工作?
- javascript - Webpack 指令
- javascript - 这个任务是怎么回事?
- reactjs - Nivo 图表工具提示隐藏在其他图表后面
- javascript - Vue在路线更改时禁用移动菜单转换?