Ruby on rails 是否将rails STI type param转换为实际的类常量?

Ruby on rails 是否将rails STI type param转换为实际的类常量?,ruby-on-rails,ruby,controller,sti,uninitialized-constant,Ruby On Rails,Ruby,Controller,Sti,Uninitialized Constant,我是rails新手。我使用以下class-User及其class-Teacher29@user=user.new(用户参数) 30授权@用户 31如果@user.save 32呈现json:@user,状态::已创建,位置:@user,序列化程序:UserSerializer 33其他 34呈现json:@user.errors,状态::无法处理的_实体 应用程序回溯 app/controllers/users\u controller.rb:29:in'create' 全回溯 activ

我是rails新手。我使用以下
class-User
及其
class-Teacher
子类创建STI。当我填写用户表单时,它抛出了一个错误

位于/用户的名称错误 未初始化的常量用户::教师

app/controllers/users\u controller.rb,第29行
24结束
25
26#帖子/用户
27 def创建
28 byebug
>29@user=user.new(用户参数)
30授权@用户
31如果@user.save
32呈现json:@user,状态::已创建,位置:@user,序列化程序:UserSerializer
33其他
34呈现json:@user.errors,状态::无法处理的_实体
应用程序回溯
  • app/controllers/users\u controller.rb:29:in'create'
全回溯
activerecord(6.0.1)lib/active\u record/heritation.rb:206:in'compute\u type'
activerecord(6.0.1)lib/active\u record/heritation.rb:233:in'find\u sti\u class'
activerecord(6.0.1)lib/active\u record/heritation.rb:263:in`subclass\u from\u attributes'
activerecord(6.0.1)lib/active_record/heritation.rb:56:in'new'
app/controllers/users\u controller.rb:29:in'create'
actionpack(6.0.1)lib/action\u controller/metal/basic\u implicit\u render.rb:6:in'send\u action'
actionpack(6.0.1)lib/abstract\u controller/base.rb:196:in'process\u action'
actionpack(6.0.1)lib/action\u controller/metal/rendering.rb:30:in'process\u action'
actionpack(6.0.1)lib/abstract\u controller/callbacks.rb:42:in'block in process\u action'
activesupport(6.0.1)lib/active\u support/callbacks.rb:135:in'run\u callbacks'
actionpack(6.0.1)lib/abstract\u controller/callbacks.rb:41:in'process\u action'
actionpack(6.0.1)lib/action\u controller/metal/rescue.rb:22:in'process\u action'
actionpack(6.0.1)lib/action\u controller/metal/instrumentation.rb:33:in'block-in-process\u action'
activesupport(6.0.1)lib/active_support/notifications.rb:180:in'block in instrument'
activesupport(6.0.1)lib/active_support/notifications/instrumenter.rb:24:in'instrument'
activesupport(6.0.1)lib/active_support/notifications.rb:180:in'instrument'
actionpack(6.0.1)lib/action\u controller/metal/instrumentation.rb:32:in'process\u action'
actionpack(6.0.1)lib/action_controller/metal/params_wrapper.rb:245:in'process_action'
activerecord(6.0.1)lib/active\u record/railties/controller\u runtime.rb:27:in'process\u action'
actionpack(6.0.1)lib/abstract_controller/base.rb:136:在“进程”中
actionpack(6.0.1)lib/action_controller/metal.rb:191:in'dispatch'
actionpack(6.0.1)lib/action_controller/metal.rb:252:in'dispatch'
actionpack(6.0.1)lib/action_dispatch/routing/route_set.rb:51:in'dispatch'
actionpack(6.0.1)lib/action\u dispatch/routing/route\u set.rb:33:in'serve'
actionpack(6.0.1)lib/action_dispatch/journey/router.rb:49:in‘block in service’
actionpack(6.0.1)lib/action_dispatch/journey/router.rb:32:in'serve'
actionpack(6.0.1)lib/action\u dispatch/routing/route\u set.rb:837:in'call'
我想我缺少了将字符串param常量化为实际类常量的部分。怎么做


请导游。谢谢

通过查看
未初始化的常量User::teacher
确保您在数据库中也有一个类型。您似乎在某处使用较低版本。它应该是
User::Teacher

,正如Paula Fidalgo所说的,以确保在用户模型模式中将type列作为字符串

之后,您可以在用户模型中创建新条目,如下所示

Teacher.create(user_params)

User.create(type: 'Teacher')

两者都是相同的。

rails-v6.0.1和ruby-v2.6.5<代码>用户::教师
这是否意味着我必须命名模型和控制器的名称空间?还有
config.load\u路径
resources:teachers,controller:'users',在routes中键入:'Teacher'
。和用户模型中的
scope:teachers,->{where(role:'Teacher')}