【发布时间】:2011-06-21 17:50:58
【问题描述】:
如果我有一个用户,并且我想创建不同类型的用户,比如只有一个电子邮件的普通用户和拥有网站字段的订阅者,我如何让订阅者从只添加一个字段的用户那里继承所有内容?
【问题讨论】:
标签: ruby-on-rails activerecord
如果我有一个用户,并且我想创建不同类型的用户,比如只有一个电子邮件的普通用户和拥有网站字段的订阅者,我如何让订阅者从只添加一个字段的用户那里继承所有内容?
【问题讨论】:
标签: ruby-on-rails activerecord
您需要创建一个包含所有字段的表,并指定一个类型列。 即
create_table :users do |t|
t.string :email
t.string :website
t.string :type
end
然后你可以有像这样的类
Class User < ActiveRecord::Base
Class Subscriber < User
订阅者将继承用户模型的所有内容。类型列在那里,以便您可以区分不同的模型。例如使用
Subscriber.all
只会获得订阅者,如果您没有使用“类型”列,它也会找到用户。
【讨论】:
nil 如果“用户”和Subscriber 如果订阅者在类型列中
你想要single table inheritance,Alex Reisner 在链接中描述。 STI 使用单个表来表示从基本模型继承的多个模型。在 Rails 世界中,数据库模式有一个列,该列指定由该行表示的模型类型。在数据库迁移中添加名为type 的列会使Rails 推断该表使用STI,尽管如果您在数据模型中指定名称,该列可以是任意名称(参见class method 'inheritance_column')。请注意,这会使type 成为保留字。
【讨论】: