【发布时间】:2011-09-18 03:12:52
【问题描述】:
我有一个数据结构:
t.integer :userID
t.string :apikey
t.integer :characterID
userID应该是主键(名字不重要,可以默认为:id)。但是,我不希望它自动递增或其他任何东西,只需将提供的值写入数据库即可。
我必须如何调整迁移和模型才能达到我想要的效果?
【问题讨论】:
标签: ruby-on-rails rake
我有一个数据结构:
t.integer :userID
t.string :apikey
t.integer :characterID
userID应该是主键(名字不重要,可以默认为:id)。但是,我不希望它自动递增或其他任何东西,只需将提供的值写入数据库即可。
我必须如何调整迁移和模型才能达到我想要的效果?
【问题讨论】:
标签: ruby-on-rails rake
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
【讨论】:
:integer吗? userID 仍然是 integer,而不是 varchar。
我没有绕过 ActiveRecord 模型,而是将userID 设为普通列并使用
validates_uniqueness_of :userID, :message => "userID needs to be unique"
在模型上进行验证。
【讨论】:
userId 进行搜索,这是必不可少的。