在 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

设置从 UserPost 的快捷方式
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