2016-01-01 43 views
4

我想在我的Ruby on Rails應用程序中創建User模型。以字符串字段爲主鍵生成模型

我使用下面的命令:

rails generate model User email:string name:string role:string 

,能夠定義與此命令的email作爲主鍵?或者我必須修改使用此命令創建的數據庫遷移文件?如何?

回答

6

不,你不能。默認情況下,主鍵是一個自動增量整數。

但是,您可以打開從該命令生成的遷移並對其進行更改(在運行rake db:migrate命令之前)。遷移將可能有一個create_table命令:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     # ... 
    end 
    end 
end 

如果你讀了create_table文檔,你會發現,你可以通過兩個選項。具體而言,您需要將:id設置爲false以不生成id字段,並且您需要指定主鍵字段的名稱。

create_table :users, id: false, primary_key: :email do |t| 
+1

好非常感謝您的答覆。然後,我將更改遷移文件。 – Jepessen

4

爲了增加@Simone Carletti的回答,您可以需要使用execute設置primary key(如果它的晦澀難懂)。如果你正在修改現有的表,你顯然沒有做這將是尤其如此:

class CreateUsers < ActiveRecord::Migration 
    def change 
     create_table :users, id: false do |t| 
     t.string :email, null: false 
     t.timestamps 
     end 
     execute "ALTER TABLE users ADD PRIMARY KEY (email);" 
    end 
end 

我們在我們的一些應用程序的使用uuid的,這就是我們需要做的(primary_key: :uuid沒「T工作)...

enter image description here


+1

這是有用的,謝謝 – Jepessen

+0

很高興幫助,感謝您花時間閱讀它 –

+1

謝謝,拯救我的一天! – Mezbah