2014-09-03 3 views
2

У меня есть таблица, чья миграция таково:Rails ссылка на модели с не целым числом первичного ключа

class CreateClient < ActiveRecord::Migration 
    def change 
    create_table :clients, :primary_key => :tag do |t| 
     t.string :name 
    end 
    change_column :clients, :tag, :string, limit: 4 
    end 
end 

так как первичный ключ, как вы можете видеть, что поле тега, который является VARCHAR (4), в настоящее время Мне нужно ссылаться на это поле из другой таблицы. Я пытался в миграции, чтобы создать ссылку на этом пути:

t.references :client, index: true 

но результирующая таблица имеет поле под названием client_id, которое ИНТ, я должен передать любой параметр метода ссылки, так что он будет создавать поле как варчар?

Спасибо заранее

+0

Используйте ': id => false', чтобы не генерировать столбец' client_id'. – pierallard

ответ

-1

Я считаю, что вы можете использовать execute, чтобы заставить рельсы в установке первичного ключа так, как вы хотите:

class CreateClient < ActiveRecord::Migration 
    def change 
    create_table :clients, :id => false do |t| 
     t.string :name 
    end 
execute "ALTER TABLE clients ADD PRIMARY KEY (name);" 

А затем установите сделать set_primary_key :name в модели Client

+0

Он установил первичный ключ так, как он хотел, он только хочет использовать этот первичный ключ в качестве ссылки. Это не отвечает на вопрос – Anwar