2011-06-19 78 views
3

自定義主鍵我有一個數據結構:指定遷移

t.integer :userID 
    t.string :apikey 
    t.integer :characterID 

的用戶ID應該是主鍵(名字並不重要,它可以默認爲:id)。但是,我不希望它是自動遞增或其他任何東西,只需要提供的值並將其寫入數據庫。

如何調整遷移和模型以實現我想要的?

回答

18
create_table(:my_table, :primary_key => 'userID') do |t| 
    # Primary key column will be created automatically 
    # Do not create here 
    # t.column :userID, :integer, :null => false 
    ... 
end 

或者

create_table :my_table, {:id => false} do |t| 
    t.integer :userID 
    t.string :apikey 
    t.integer :characterID 
    t.timestamps 
end 
execute "ALTER TABLE my_table ADD PRIMARY KEY (userID);" 

而且不要忘記在某處,就把這行模型:

set_primary_key :userID 
+0

在你的第一個例子中,它不應該是':integer'嗎? 'userID'仍然是一個'integer',而不是varchar。 – Femaref

+0

@Femaref yaa ..我很抱歉..答案更新.. –

+0

可能不需要一個範圍。謝謝。 – Femaref

0

而是繞過ActiveRecord的模式,我做了userID正常列和使用

validates_uniqueness_of :userID, :message => "userID needs to be unique" 

對模型進行驗證。

+3

你添加了一個索引嗎?如果您要使用必需的'userId'進行搜索。 – nathanvda