Rails: можно ли использовать полиморфные ссылки с нецелыми первичными ключами? - PullRequest
6 голосов
/ 19 января 2011

У меня есть база данных, которая использует UUID в качестве первичных ключей, например:

create_table "my_table", :id => false, :force => true do |t|
 t.string "id", :limit => 36
end

Однако, когда я пытаюсь использовать: ссылки на внешние ключи к этой таблице, он генерирует целочисленные столбцы для идентификатора. Можно ли: ссылки могут быть проинструктированы иметь дело с нецелым идентификатором? Моя миграция для ссылочной таблицы выглядит следующим образом:

create_table "child_table" :id => false, :force => true do |t|
 t.string "id", :limit => 36
 t.references :my_table
end

Я знаю, что мог бы просто вручную создать столбцы :my_table_id и :my_table_type, но мне интересно, можно ли заставить :references творить чудеса в этих обстоятельствах, чтобы мне не пришлось обрабатывать идентификатор + введите явно в моем коде.

Ответы [ 2 ]

17 голосов
/ 25 марта 2015

A: опция типа была добавлена ​​при ссылках со времен Rails 4.2

t.references :car, type: :uuid, index: true

Например:

def change
  enable_extension 'uuid-ossp'
  create_table :cars, id: :uuid do |t|
    t.integer :seats
    # And other car-specific things
  end
  create_table :wheels do |t|
    t.references :car, type: :uuid, index: true
    t.integer :radius
    # And other wheel-specific things
  end
end

источник: https://github.com/rails/rails/pull/16231

3 голосов
/ 19 января 2011

Нет, references создает только целочисленные столбцы на момент написания.

Я уверен, что вы можете переопределить метод references, чтобы делать то, что вы хотите.Но, IMO, вам лучше указать столбцы UUID и явно ввести столбцы.Таким образом, код ясно о том, что происходит за кулисами.

...