Rails 用于连接多个表的 Activerecord 查询
Rails Activerecord query for joining multiple tables
型号
class AdminUser < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
has_many :comments
end
我想获取此 AdminUser 下每个用户创建的每个 post 下所有评论的列表。
要让 1 个用户完成每个 post 下的所有评论很容易。我会用类似
的东西
comments=Comment.joins(:post).where("posts.user_id= ?",userid.to_s )
但在这里我需要更上一层楼。即从 1 admin_user 以下的每个用户的每个 post 中获取评论。我以前从来没有用过不止一个连接,所以我有点困惑。
如果我可以在字符串中使用 Activerecord 关联,它可能看起来像
comments=Comment.joins(:post).joins(:user).where("posts.user.admin_user.id=?",adminuser_id)
但是我不能用posts.user.admin_user
我们先获取属于管理员用户的用户 ID,然后让他们使用您的查询来挑选评论如何?
user_ids = admin_user.users.pluck(:id)
comments=Comment.joins(:post).where("posts.user_id IN (?)", user_ids )
我假设您在问题中粘贴的查询会起作用。
应该是
Comment.joins(post: :user)
型号
class AdminUser < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
has_many :comments
end
我想获取此 AdminUser 下每个用户创建的每个 post 下所有评论的列表。
要让 1 个用户完成每个 post 下的所有评论很容易。我会用类似
的东西comments=Comment.joins(:post).where("posts.user_id= ?",userid.to_s )
但在这里我需要更上一层楼。即从 1 admin_user 以下的每个用户的每个 post 中获取评论。我以前从来没有用过不止一个连接,所以我有点困惑。
如果我可以在字符串中使用 Activerecord 关联,它可能看起来像
comments=Comment.joins(:post).joins(:user).where("posts.user.admin_user.id=?",adminuser_id)
但是我不能用posts.user.admin_user
我们先获取属于管理员用户的用户 ID,然后让他们使用您的查询来挑选评论如何?
user_ids = admin_user.users.pluck(:id)
comments=Comment.joins(:post).where("posts.user_id IN (?)", user_ids )
我假设您在问题中粘贴的查询会起作用。
应该是
Comment.joins(post: :user)