Arel 与 from 子句中的横向表,

问题描述

我有 3 个表用户、角色和角色用户,其中最后一个表是中间表。因此,用户可以有多个角色,任何角色都可以属于多个用户。 问题陈述是我们需要呈现与搜索条件匹配的用户及其角色列表。

select users.id,dynamic_roles.name
from users,lateral ( 
  select GROUP_CONCAT( disTINCT( roles.name ) ) as name
  from roles,roles_users 
  where (
    (  roles_users.user_id = users.id AND roles_users.role_id = roles.id )
  ) 
) dynamic_roles
where dynamic_roles.name LIKE '%admin%' AND dynamic_roles.name LIKE '%manager%';

我的尝试如下:

rs = Role.joins(:users).select("GROUP_CONCAT( disTINCT( #{Role.table_name}.name ) ) as name")
users = User.arel_table #predefined reference received as argument to a method that is supposed to compose the arel query.
users = users.project(users['id']).distinct

users.to_sql
=> "SELECT disTINCT users.id FROM users"

users.from('dynamic_roles').to_sql
=> "SELECT disTINCT users.id FROM dynamic_roles"

users.lateral('dynamic_roles').to_sql
=> TypeError: Cannot visit Arel::Nodes::Lateral
from /Users/prasadsurase/.rvm/gems/ruby-2.7.1/gems/activerecord-6.0.3.6/lib/arel/visitors/visitor.rb:39:in `rescue in visit'
Caused by NoMethodError: undefined method `visit_Arel_Nodes_Lateral' for #<Arel::Visitors::MysqL:0x00007f97424477b8>

引用 https://apidock.com/rails/v6.0.0/Arel/SelectManager/fromhttps://apidock.com/rails/v6.0.0/Arel/SelectManager/lateral

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)