Обновить определенный столбец с помощью update_all при выполнении объединений - PullRequest
1 голос
/ 23 июня 2019

У меня есть ассоциация что-то вроде ниже

Пользователь имеет множество ролей
У пользователя есть разрешение_100 *

Имена таблиц пользователи, роли и разрешения, и они находятся в одной схеме и базе данных

Я хочу получить роли: admin, super_admin, sub_admin. И хотите обновить столбец в таблице разрешений

 User.joins(:roles,:permission).where('roles.name in (?)', ['admin', 'sub_admin', 'super_admin']).select("permissions.*").update_all('permission.can_view_details', true)

Запуск приведенного выше запроса дает мне ошибку.

Вызвано PG :: UndefinedColumn: ERROR: столбец "can_view_details" отношения "users" не существует ЛИНИЯ 1: ОБНОВЛЕНИЕ "схемы". "Пользователи" SET "can_view_details" = ...

1 Ответ

2 голосов
/ 23 июня 2019

Попробуйте получить права доступа прямо из модели, но с помощью объединений с пользователем:

Permission.
  joins(user: :roles).
  where('users.roles IN (?)', %w[admin sub_admin super_admin]).
  update_all(can_view_details: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...