Здесь рассмотрено, как изменить тип и имя первичного ключа в модели Ruby On Rails.
Все готово. Мы настроили свой первичный ключ в модели. Теперь можно использовать его в качестве внешнего ключа в других таблицах так же, как в случае стандартного первичного ключа (Создав поле с именем finger_id).
Введение
По умолчанию, в любой создаваемой таблице в Ruby On Rails, первичным ключом является автогенерируемое поле :id типа integer. Это поле можно изменить как на этапе создания таблицы, так и в любое время после этого.
1. Файл миграции
Создадим модель пальцев (Finger). После выполнения команды rails generate model создастся файл миграции. Подправим его перед выполнением rake db:migrate:
class CreateFingers < ActiveRecord::Migration
def change
create_table :fingers, id: false do |t|
t.string :name, null: false
t.float :length
t.timestamps
end
reversible do |dir|
dir.up do
execute "ALTER TABLE fingers ADD PRIMARY KEY (name);"
end
dir.down do
execute "ALTER TABLE fingers DROP CONSTRAINT fingers_pkey;"
end
end
reversible do |dir|
dir.up do
execute "ALTER TABLE fingers ADD PRIMARY KEY (name);"
end
dir.down do
execute "ALTER TABLE fingers DROP CONSTRAINT fingers_pkey;"
end
end
end
end
То же самое можно проделать с уже существующей таблицей, удалив поле :id и добавив свое поле, которое будет первичным ключом:
class ChangePrimaryKeyInFingers < ActiveRecord::Migration
def change
remove_column :fingers, :id
add_column :fingers, :name, :string
reversible do |dir|
dir.up do
execute "ALTER TABLE fingers ADD PRIMARY KEY (name);"
end
dir.down do
execute "ALTER TABLE fingers DROP CONSTRAINT fingers_pkey;"
end
end
dir.up do
execute "ALTER TABLE fingers ADD PRIMARY KEY (name);"
end
dir.down do
execute "ALTER TABLE fingers DROP CONSTRAINT fingers_pkey;"
end
end
end
end
2. Модель
Подправим модель, указав в ней первичный ключ:
class Finger < ActiveRecord::Base
self.primary_key = :name
end
3. Заключение
Все готово. Мы настроили свой первичный ключ в модели. Теперь можно использовать его в качестве внешнего ключа в других таблицах так же, как в случае стандартного первичного ключа (Создав поле с именем finger_id).
Комментариев нет:
Отправить комментарий