我想知道哪些是在我的视图中访问类型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表中可能是更好的解决方案吗?
答案 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