如何解决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/from 和 https://apidock.com/rails/v6.0.0/Arel/SelectManager/lateral
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。