在 rails 中加载关联的最高效方式
Most performant way to load associations in rails
我正在尝试加载一个嵌套关联,一个 User
可以属于许多 Groups
,我想从用户所在的 Groups
加载所有 Posts
是会员,但只有帖子没有群组。
类似于 current_user.groups.eager_load(:posts)
,但没有在组下嵌套帖子。
我假设 Post
属于 Group
这里。
从您需要加载的模型开始,并从那里构建查询。如果用户在这里属于 2 个组,这将加载这 2 个组的所有帖子。
Post.where(group: current_user.groups)
您可以使用 has_many :through
设置从 User
到 Post
的快捷方式
class User < ApplicationRecord
has_and_belongs_to_many :groups
has_many :posts, through: :groups
# if User already has a `has_many :posts`, you'll need
# to give the through-association a unique name like this:
# has_many :group_posts, through: :groups, source: :posts
end
class Group < ApplicationRecord
has_and_belongs_to_many :users
has_many :posts
end
class Post < ApplicationRecord
belongs_to :group
# optionally, you can define the inverse here as well
# has_many :users, through: :group
end
...
# eager_load on a query: User.includes(:posts) or User.eager_load(:posts)
# get from current user: current_user.posts
我正在尝试加载一个嵌套关联,一个 User
可以属于许多 Groups
,我想从用户所在的 Groups
加载所有 Posts
是会员,但只有帖子没有群组。
类似于 current_user.groups.eager_load(:posts)
,但没有在组下嵌套帖子。
我假设 Post
属于 Group
这里。
从您需要加载的模型开始,并从那里构建查询。如果用户在这里属于 2 个组,这将加载这 2 个组的所有帖子。
Post.where(group: current_user.groups)
您可以使用 has_many :through
设置从User
到 Post
的快捷方式
class User < ApplicationRecord
has_and_belongs_to_many :groups
has_many :posts, through: :groups
# if User already has a `has_many :posts`, you'll need
# to give the through-association a unique name like this:
# has_many :group_posts, through: :groups, source: :posts
end
class Group < ApplicationRecord
has_and_belongs_to_many :users
has_many :posts
end
class Post < ApplicationRecord
belongs_to :group
# optionally, you can define the inverse here as well
# has_many :users, through: :group
end
...
# eager_load on a query: User.includes(:posts) or User.eager_load(:posts)
# get from current user: current_user.posts