访问关系中属性的最佳实践belongs_to

时间:2017-11-21 11:18:22

标签: ruby-on-rails

我想知道哪些是在我的视图中访问类型belongs_to的关系中的属性的最佳方法。让我通过这个例子来解释:

class Author < ApplicationRecord
  has_many :books, dependent: :destroy
end

class Book < ApplicationRecord
  belongs_to :author
end

所以,如果我想在一个呈现所有书籍的视图中访问作者姓名,我会做这样的事情:

<% @books.each do |book| %>
  <%= book.author.name %>
<% end %>

所以,我的控制台的输出是:

CACHE User Load (0.0ms)  SELECT  "authors".* FROM "authors" WHERE "authors"."id" = ? LIMIT ?  [["id", 9], ["LIMIT", 1]]

所以,如果我有100本书,那么对于每本书,这个查询将重复100次。

除了访问关系之外,还有其他任何方式获取作者的名字吗?

将书籍名称保存在Book表中可能是更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

它被称为N + 1问题。您的案例中的解决方案很简单 - ActiveRecord提供includes方法,该方法以优雅的方式处理相关记录的获取:

@books = Book.your_possible_scope.includes(:author)

您可以在Rails指南中找到有关此主题的更多信息: http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations