per*_*kle 2 model ruby-on-rails single-table-inheritance
我跟踪了一些资料来了解如何在 Ruby On Rails 中实现单表继承。我使用的具体示例只涉及两种类型的用户:RegularUser继承Admin自User具有一些字段(如username. 模型中的字段之一User是用户的类型,它只是一个字符串字段。我的问题是:当我简单地在名为“type”的字符串字段中指定子类(该字段可能只是与子类无关的字符串字段)时,Rails 如何连接要使用的子类上的点?如果该type字段的作用如我所想,这是否意味着它是 RoR 中专门为 STI 保留的关键字?任何指示将不胜感激。这是我的用户迁移文件(没什么特别的):
class CreateUsers < ActiveRecord::Migration[6.1]
def change
create_table :users do |t|
t.string :username
t.string :email
t.string :type
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
Rails有一个方法可以根据类型名推断对应的类
所以如果你的数据库中有一条记录
User, id: 5, type: 'user_admin'
Run Code Online (Sandbox Code Playgroud)
你也是User.find(5)
Rails 将查看类型值“user_admin”并通过基本上执行以下操作来为您常量化正确的实例ActiveSupport::Dependencies.constantize("user_admin")
这是一个奇特的名称,表示给我对应于该字符串的 ruby 类。
在 Rails 中,除了促进 STI 之外,您不应该使用“type”作为任何列名,因此它确实是一种保留字,如果您的数据库中包含任何不是 AR 类名的内容,您的代码将会崩溃。如果您想对列使用名称“type”,您将需要更改inheritance_column,如此处所述