2011-06-19 47 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