Rails自关联反向查询报错:未初始化常量MasterUser
问题解决:Rails自关联反向查询实现
你遇到的NameError: uninitialized constant MasterUser错误,核心原因是根本不存在MasterUser这个模型——你只有User模型,所有用户数据都存在users表中,自关联是在同一个模型内完成的,不需要额外定义MasterUser模型。
调整关联定义(优化可读性)
你当前的关联定义可以优化命名,让逻辑更清晰,避免混淆:
class User < ApplicationRecord # 作为上级用户,拥有多个下属用户 has_many :sub_users, class_name: 'User', foreign_key: 'master_user_id', inverse_of: :master_user # 作为下属用户,属于一个上级用户 belongs_to :master_user, class_name: 'User', optional: true, inverse_of: :sub_users end
正确的反向查询方式
- 查询某个用户的上级:
User.first.master_user(这个你已经能正常使用) - 查询某个用户的所有下属:
User.find(master_user_id).sub_users
如果需要批量查询所有拥有下属的上级用户,可以用:
# 找到所有有下属的用户 User.joins(:sub_users).distinct
错误原因说明
你调用MasterUser.users时,Rails会尝试加载名为MasterUser的模型类,但你并没有创建这个模型,因此抛出未初始化常量的错误。自关联的本质是同一个模型内的关联,所有操作都基于User模型完成。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

