Rails Model Inheritance

后端 未结 2 1209
粉色の甜心
粉色の甜心 2020-12-08 02:56

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

相关标签:
2条回答
  • 2020-12-08 03:21

    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.

    0 讨论(0)
  • 2020-12-08 03:42

    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.

    0 讨论(0)
提交回复
热议问题