如何为Rails中的多个表选择特定字段

时间:2018-07-01 13:36:06

标签: ruby-on-rails ruby

我有三个模型AdminUserPost

Admin模型包含idemailpassword

User模型包含idemailpasswordadmin_id

Post模型包含idnameadmin_id

Post中的admin_idUser中的== admin_id时,我需要选择Post的所有名称

2 个答案:

答案 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)