进行联接时使用update_all更新特定列

时间:2019-06-23 17:47:18

标签: ruby-on-rails ruby

我有一个类似下面的关联

用户具有has_many个角色
用户具有has_one权限

表名 用户,角色和权限,并且它们在相同的架构和数据库下

我想获取角色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引起:错误:关系“用户”的列“ can_view_details”不存在 第1行:更新“模式”。“用户”设置“ can_view_details” = ...

1 个答案:

答案 0 :(得分:2)

尝试直接从模型中获取权限,但要对用户使用联接:

Permission.
  joins(user: :roles).
  where('users.roles IN (?)', %w[admin sub_admin super_admin]).
  update_all(can_view_details: true)