我有這三類用戶,驅動程序,公司。每個公司或司機屬於一個用戶。該模型看起來像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