【发布时间】:2013-09-23 22:14:09
【问题描述】:
通过主键是字符串而不是 int 的迁移在 Rails 中创建表的正确方法是什么?
我尝试将primary_key 设置为@oldergod 在下面的答案中建议,但baz 似乎仍然设置为int:
class CreateFoos < ActiveRecord::Migration
def change
create_table :foos, primary_key: 'baz' do |t|
end
end
end
更新
我已经试过了
class CreateFoos < ActiveRecord::Migration
def change
create_table :foos, primary_key: false do |t|
t.string :baz
end
end
end
这让我更接近了一点,但仍然缺少列上的 PRIMARY 索引。我试过add_index :foos, :baz, type: :primary 但这会产生以下错误:
SQLite3::SQLException: near "primary": syntax error: CREATE primary INDEX "index_foos_on_baz" ON "foos" ("baz")/Users/kyledecot/.rvm/gems/ruby-1.9.3-p392/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize'
在查看http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_index_options 之后,这似乎应该可以工作
【问题讨论】:
-
查看answer,它详细介绍了生成器的工作原理以及如何解决它。
-
该答案的副作用是
rake db:schema:load无法正常工作并创建int列。只有使用rake db:migrate才能正常工作。 -
您正在尝试更改 Rails 的预期行为,副作用是可以预料的。你为什么有兴趣这样做呢?使用整数主键有什么负面影响?
标签: ruby-on-rails ruby ruby-on-rails-4