Rails模型inheritance

如果我有一个用户并且我想要制作不同类型的用户,比如说只有一个电子邮件的普通用户和有网站字段的订阅者,我怎样才能让订阅者从只有添加字段的用户inheritance所有内容?

您需要创建一个包含所有字段的表,并指定一个类型列。 即

create_table :users do |t| t.string :email t.string :website t.string :type end 

然后你可以有像这样的课程

 Class User < ActiveRecord::Base Class Subscriber < User 

订阅者将inheritanceUsers模型中的所有内容。 类型列在那里,以便您可以区分不同的模型。 例如使用

 Subscriber.all 

只会获得订阅者,就好像你没有使用“类型”列一样,它也会找到用户。

您需要单表inheritance ,由Alex Reisner在链接中描述。 STI使用单个表来表示从基础模型inheritance的多个模型。 在Rails世界中,数据库模式有一个列,用于指定行所表示的模型类型。 在数据库迁移中添加名为type的列有Rails推断该表使用STI,但如果在数据模型中指定名称,则该列可以是任意名称(请参阅类方法’inheritance_column’ )。 请注意,这使得type成为保留字。