как выбрать конкретное поле для нескольких таблиц в рельсах - PullRequest
0 голосов
/ 01 июля 2018

у меня три модели 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

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Это должно работать для любой ассоциации, которая у вас есть на ваших моделях. Попробуйте это:

Post.where('admin_id IN (?)', User.pluck(:admin_id)).pluck(:name)
0 голосов
/ 01 июля 2018

как указано выше, схема вашей таблицы выглядит следующим образом

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

объединения создадут sql INNER JOIN между этими 3 таблицами, затем вы выбираете столбец, который хотите отобразить, в качестве примера кода, приведенного выше. Я использую users.email в качестве user_email, user_email - это псевдоним, так что вы можете получить доступ напрямую используя @ posts.first.user_email

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...