Каков правильный способ создания таблицы в рельсах посредством миграции, в которой первичный ключ является строкой вместо int?Rails migration create table w/string основанный первичный ключ
Я попытался установить primary_key
, как @oldergod предложил в ответ ниже, но baz
кажется, приготовьтесь к int
еще:
class CreateFoos < ActiveRecord::Migration
def change
create_table :foos, primary_key: 'baz' do |t|
end
end
end
UPDATE
Я так пытался
class CreateFoos < ActiveRecord::Migration
def change
create_table :foos, primary_key: false do |t|
t.string :baz
end
end
end
, который меня немного ближе, но все еще отсутствует ПЕРВИЧНЫЙ индекс в столбце. Я попытался 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
Смотрите этот [ответ] (http://stackoverflow.com/questions/1200568/using-rails-how-can-i-set-my-primary-key-to-not-be -an-integer-typed-column), он содержит подробные сведения о том, как работает генератор и как его обойти. – engineersmnky
Этот ответ имеет побочный эффект 'rake db: schema: load' не работает корректно и создает столбцы' int'. Он будет работать только при использовании 'rake db: migrate'. –
Вы пытаетесь изменить предполагаемое поведение побочных эффектов Rails. Почему вы так заинтересованы в этом? Какой отрицательный эффект имеет целостный первичный ключ? – engineersmnky