我有一个数据结构:
t.integer :userID
t.string :apikey
t.integer :characterID
userID应该是主键(名称不重要,默认为:id
)。但是,我不希望它是自动递增或其他任何东西,只需获取提供的值并将其写入数据库。
如何调整迁移和模型以实现我想要的目标?
答案 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"
在模型上验证它。