2

通过主键是字符串而不是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后工作

4

1 回答 1

-1

如果是字符串有什么不同?请参阅创建表文档。

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

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

于 2013-09-23T13:18:49.397 回答