Ruby on rails 型号:账户->;用户->;帖子。。如何获得一个帐户的所有帖子?(铁路)

Ruby on rails 型号:账户->;用户->;帖子。。如何获得一个帐户的所有帖子?(铁路),ruby-on-rails,Ruby On Rails,如果我有以下(简化)模型: 这样的事情是为一个帐户获取帖子的最佳方式吗 posts = [] account.users.each do |user| posts.merge(user.posts) end posts.sort_by_created_at 在过去,我可能会在Posts表中放置一个account_id,因为如果有很多用户,我会担心性能和同步问题,因为有两个account_id(用户和Posts,当account和Posts已经由User:User_id->Posts:acc

如果我有以下(简化)模型:

这样的事情是为一个帐户获取帖子的最佳方式吗

posts = []
account.users.each do |user|
  posts.merge(user.posts)
end
posts.sort_by_created_at
在过去,我可能会在Posts表中放置一个account_id,因为如果有很多用户,我会担心性能和同步问题,因为有两个account_id(用户和Posts,当account和Posts已经由User:User_id->Posts:account_id->account链接时)。如果您对此事有任何建议,我将不胜感激。谢谢account.rb中的

has_many :posts, :through => :users
然后获取与帐户关联的所有帖子

account.posts.each do |post|
  # your code
end
现在,为了减少数据库查询的数量,您可以联接表,当从数据库获取帐户数据时,您可以使用此查询

account = Account.where(your_condition).includes(:posts)
in account.rb

has_many :posts, :through => :users
然后获取与帐户关联的所有帖子

account.posts.each do |post|
  # your code
end
现在,为了减少数据库查询的数量,您可以联接表,当从数据库获取帐户数据时,您可以使用此查询

account = Account.where(your_condition).includes(:posts)

“has_many through”的问题是它在内部使用连接。到处使用join是不合适的。示例场景:如果您有数千个帐户,每个帐户有数千个用户,每个帐户有数千篇文章,那么联接表将包含1000*1000条记录

我建议另一种方法

def posts
  Post.where(user_id: users.pluck(:id))
end
Pull方法仅从数据库中检索指定的字段,而不是整个记录。上述方法将触发2个查询:1)检索所有用户id 2)检索用户id位于指定id数组中的帖子

上述方法可用于任何帐户对象,如

@account.posts

“has_many through”的问题是它在内部使用连接。到处使用join是不合适的。示例场景:如果您有数千个帐户,每个帐户有数千个用户,每个帐户有数千篇文章,那么联接表将包含1000*1000条记录

我建议另一种方法

def posts
  Post.where(user_id: users.pluck(:id))
end
Pull方法仅从数据库中检索指定的字段,而不是整个记录。上述方法将触发2个查询:1)检索所有用户id 2)检索用户id位于指定id数组中的帖子

上述方法可用于任何帐户对象,如

@account.posts