在迁移中指定自定义主键

时间:2011-06-19 11:54:42

标签: ruby-on-rails rake

我有一个数据结构:

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

userID应该是主键(名称不重要,默认为:id)。但是,我不希望它是自动递增或其他任何东西,只需获取提供的值并将其写入数据库。

如何调整迁移和模型以实现我想要的目标?

2 个答案:

答案 0 :(得分:19)

 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

答案 1 :(得分:0)

我没有绕过ActiveRecord模型,而是将userID作为普通列并使用

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

在模型上验证它。