Rails迁移创建表w /基于字符串的主键

时间:2013-09-23 13:14:53

标签: ruby-on-rails ruby ruby-on-rails-4

通过迁移创建表的正确方法是什么?主键是字符串而不是int?

我已经尝试将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

之后,这似乎应该有效

1 个答案:

答案 0 :(得分:-1)

如果是字符串会有什么不同?请参阅create table doc。

create_table :foos, primary_key: 'baz' do |t|
  t.column :baz, :string
end
  

另请注意,这只是在表中设置主键。您   另外需要在模型中配置主键   self.primary_key =。模型不会自动检测主键   他们的表定义。