首页 > 解决方案 > 我可以使用 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,但我很好奇这是否是一个可行的解决方案。

标签: ruby-on-railsactiverecord

解决方案


如果您想articlesArticle具有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 }

推荐阅读