Rails 4.x
Quando você já tem users
e uploads
tabelas e deseja adicionar um novo relacionamento entre eles.
Tudo que você precisa fazer é: basta gerar uma migração usando o seguinte comando:
rails g migration AddUserToUploads user:references
O que criará um arquivo de migração como:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Em seguida, execute a migração usando rake db:migrate
. Essa migração cuidará da adição de uma nova coluna denominada user_id
à uploads
tabela (referenciando a id
coluna na users
tabela). Além disso, também adicionará um índice na nova coluna.
UPDATE [Para Rails 4.2]
Não é possível confiar nos Rails para manter a integridade referencial; bancos de dados relacionais vêm em nosso socorro aqui. O que isso significa é que podemos adicionar restrições de chave estrangeira no próprio nível do banco de dados e garantir que o banco de dados rejeite qualquer operação que viole a integridade referencial definida. Como o @infoget comentou, o Rails 4.2 é fornecido com suporte nativo a chaves estrangeiras (integridade referencial) . Não é necessário, mas você pode adicionar uma chave estrangeira (como é muito útil) à referência que criamos acima.
Para adicionar chave estrangeira a uma referência existente , crie uma nova migração para adicionar uma chave estrangeira:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Para criar uma referência totalmente nova com uma chave estrangeira (no Rails 4.2) , gere uma migração usando o seguinte comando:
rails g migration AddUserToUploads user:references
que criará um arquivo de migração como:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Isso adicionará uma nova chave estrangeira à user_id
coluna da uploads
tabela. A chave referencia a id
coluna na users
tabela.
NOTA: Além de adicionar uma referência, você ainda precisará criar uma referência primeiro e depois a chave estrangeira ( você pode optar por criar uma chave estrangeira na mesma migração ou em um arquivo de migração separado ). O Active Record suporta apenas chaves estrangeiras de coluna única e somente atualmente mysql
, mysql2
e os PostgreSQL
adaptadores são suportados. Não tente fazer isso com outros adaptadores como sqlite3
, etc. Consulte Guias do Rails: Chaves estrangeiras para sua referência.