如何在 Rails 中的关联上急切加载关联?
How to eager load association on association in Rails?
我有这样的系统:
class Tag < ActiveRecord::Base
# attr :name
end
class Article < ActiveRecord::Base
has_many :tag_associations, dependent: :destroy
has_many :tags, through: :tag_associations
end
class Company < ActiveRecord::Base
has_many :articles
end
class User < ActiveRecord::Base
belongs_to :company
end
我想这样做:
user.company.articles.includes(:tags).all
在做文章查询的时候那个eager会加载所有的标签吗?如果不是,我如何急切加载每篇文章的标签,以便它不是 N+1 查询,如果我这样做:
company.articles.all.select do |article|
article.tags.any? do |tag|
tag.name == 'foo'
end
end
像这样嵌套预加载。
@company = user.company.includes(articles: :tags).all
和
@company.articles.all.select do |article|
article.tags.any? do |tag|
tag.name == 'foo'
end
end
我有这样的系统:
class Tag < ActiveRecord::Base
# attr :name
end
class Article < ActiveRecord::Base
has_many :tag_associations, dependent: :destroy
has_many :tags, through: :tag_associations
end
class Company < ActiveRecord::Base
has_many :articles
end
class User < ActiveRecord::Base
belongs_to :company
end
我想这样做:
user.company.articles.includes(:tags).all
在做文章查询的时候那个eager会加载所有的标签吗?如果不是,我如何急切加载每篇文章的标签,以便它不是 N+1 查询,如果我这样做:
company.articles.all.select do |article|
article.tags.any? do |tag|
tag.name == 'foo'
end
end
像这样嵌套预加载。
@company = user.company.includes(articles: :tags).all
和
@company.articles.all.select do |article|
article.tags.any? do |tag|
tag.name == 'foo'
end
end