воскресенье, 10 августа 2014 г.

Changing the Primary Key in Ruby on Rails Models

Здесь рассмотрено, как изменить тип и имя первичного ключа в модели Ruby On Rails.

Введение


По умолчанию, в любой создаваемой таблице в 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
  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
  end
end

2. Модель


Подправим модель, указав в ней первичный ключ:
class Finger < ActiveRecord::Base
  self.primary_key = :name
end

3. Заключение


Все готово. Мы настроили свой первичный ключ в модели. Теперь можно использовать его в качестве внешнего ключа в других таблицах так же, как в случае стандартного первичного ключа (Создав поле с именем finger_id).



Комментариев нет:

Отправить комментарий