【问题标题】:ActiveRecord::SubclassNotFound: Invalid single-table inheritance type: User::Admin is not a subclass of UserActiveRecord::SubclassNotFound:无效的单表继承类型:User::Admin 不是 User 的子类
【发布时间】:2020-12-30 23:39:33
【问题描述】:

因此,我发现的大多数问题都涉及不想使用单表继承的人。

我愿意,现在有点头疼。

我得到标题错误:

ActiveRecord::SubclassNotFound: Invalid single-table inheritance type: User::Admin is not a subclass of User 在调试我的代码时。

问题是,在控制台和我的 rspec 测试中,代码都可以正常工作(所有规范都通过并且它们多次引用此类。

我可以从控制台创建User::Admin 的实例。

所以这让我相信该类没有被 Rails“魔术”加载,但我终其一生都无法找出原因。

该类位于 `app/models/user/admin.rb'

class User::Admin < User
end

app/modles/user.rb

class User < ApplicationRecord
end

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    这与 rails 自动加载和 STI 有关。我记录了这里发生的事情:https://flatironsdevelopment.com/blog/rails-devise-not-a-subclass-of-user

    长话短说,我不得不在开发中或 Rails.application.config.eager_load 为 false 时进行猴子补丁,才能在 gem 中加载正确的类。对我来说,它与 Devise 和我在 User 模型中覆盖以返回 User 类的应用程序实例的方法 def self.find_sti_class(type_name) 有关,而不是 devise 正在使用的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2022-01-03
      • 2021-04-13
      • 2020-09-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      相关资源
      最近更新 更多