微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Arel 与 from 子句中的横向表,

如何解决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 举报,一经查实,本站将立刻删除。