我有三个模型Admin
,User
,Post
Admin
模型包含id
,email
,password
User
模型包含id
,email
,password
,admin_id
Post
模型包含id
,name
,admin_id
当Post
中的admin_id
为User
中的==
admin_id
时,我需要选择Post
的所有名称
答案 0 :(得分:1)
如上所示,您的表架构如下所示:
admin has_many users
admin has_many posts
现在获取所有帖子,当帖子中的admin_id ==帖子中的admin_id时,您可以使用联接
@posts = Post.joins(admin: :users).
select("post.*, users.email as user_email").
where("posts.admin_id = users.admin_id")
@posts.first.name is equal to name of first post
@posts.first.user_email is equal to email in user table
joins将在这3个表之间生成sql INNER JOIN,然后选择要显示的列,作为上面的示例代码,我使用users.email作为user_email,user_email是别名,因此您可以访问直接使用@ posts.first.user_email
答案 1 :(得分:0)
这应该适用于您在模型上具有的任何关联。试试这个:
Post.where('admin_id IN (?)', User.pluck(:admin_id)).pluck(:name)