我有这三类用户,驱动程序,公司。每个公司或司机属于一个用户。该模型看起来像Rails继承子类
class Company < User
has_many :driver
end
class Driver < User
end
class User < ActiveRecord::Base
enum role: [:admin, :support, :B2B , :B2C]
end
和数据库看起来像
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.timestamps null: false
end
end
end
class CreateCompanies < ActiveRecord::Migration
def change
create_table :companies do |t|
t.string :comp_name
t.string :first_name_counterpart
t.string :last_name_counterpart
t.string :iban_nr
t.string :bic
t.string :email_counterpart
t.string :addresse
t.string :city
t.string :zip
t.references :user
t.timestamps null: false
end
end
end
class CreateDrivers < ActiveRecord::Migration
def change
create_table :drivers do |t|
t.string :first_name
t.string :last_name
t.date :birthday
t.integer :sex
t.integer :dpi
t.integer :score
t.references :user
t.timestamps null: false
end
end
end
为什么我不能创建一个驱动程序实例。例如,如果我尝试d = Driver.new
,我得到一个用户实例。 d = Driver.new => #<Driver id: nil, email: nil, created_at: nil, updated_at: nil>
我很困惑。我想在用户中同时存储每个公司和驱动程序。我的意思是,当我创建一个驱动程序应自动创建一个用户的电子邮件和密码。如果我错了,请纠正我! 但是当我在控制台中创建一个驱动程序时,得到nil作为'User.all'的答案只是没有 – Arthur
啊哈,我不认为Rails是这样工作的。你在上面的注释中写了什么,类似于集合(例如has_many,belongs_to),但实际情况并非如此,因为如果我正确地得到它,Driver与User相同,只有一些功能超出User。所以它不像“驾驶员也有/属于用户”。在那种情况下,我认为STI方法实际上就是你所追求的,请参阅@Dharam的答案。 – BoraMa