Rails 4.x
Quando você já tem users e uploadstabelas 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à uploadstabela (referenciando a idcoluna na userstabela). 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_idcoluna da uploadstabela. A chave referencia a idcoluna na userstabela.
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, mysql2e os PostgreSQLadaptadores são suportados. Não tente fazer isso com outros adaptadores como sqlite3, etc. Consulte Guias do Rails: Chaves estrangeiras para sua referência.