2011-01-19 1 views
5

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

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

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

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 можно ли делать свою магию в этих условиях, так что я не нужно явно обращаться с идентификатором id + во всем моем коде.

ответ

3

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

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

+0

Да, я только что проверил источник ActiveRecord и он жестко запрограммирован для того, чтобы ID был целым числом. – kdt

15

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

 Смежные вопросы

  • Нет связанных вопросов^_^