If I have a User and I want to make different types of users, say just normal users with only an email and subscribers who have a website field, how would I make subscribers
You would need to create a table with all of the fields, as well as specify a type column. i.e
create_table :users do |t|
t.string :email
t.string :website
t.string :type
end
Then you can have classes like
Class User < ActiveRecord::Base
Class Subscriber < User
A subscriber will inherit everything from the Users model. The type column is there so that you can distinguish from the different models. For instance using
Subscriber.all
Will only get subscribers, where as if you did not use the 'type' column it would also find users too.
You want single table inheritance, described at the link by Alex Reisner. STI uses a single table to represent multiple models that inherit from a base model. In the Rails world, the database schema has a column which specifies the type of model represented by the row. Adding a column named type
in a database migration has Rails infer the table uses STI, although the column can be an arbitrary name if you specify the name in the data model (see the class method 'inheritance_column'). Note that this makes type
a reserved word.