Les clés étrangères avec des Rails' ActiveRecord::Migration?
Je suis nouveau sur Ruby on Rails (je sais Ruby juste décemment tout de même) et en regardant les outils de Migration, il a l'air vraiment génial. Schémas de base de données peut enfin (facilement) rendez-vous dans le contrôle de source.
Maintenant mon problème avec elle. Lors de l'utilisation de Postgresql comme base de données, il n'a pas de programme d'installation de clés étrangères. Je voudrais les avantages de clés étrangères dans mon schéma telles que l'intégrité référentielle. Alors, comment puis-je demander les clés étrangères avec les Migrations?
OriginalL'auteur Earlz | 2010-04-03
Vous devez vous connecter pour publier un commentaire.
Rails de la philosophie, c'est que les contrôles d'intégrité est une logique d'entreprise qui appartient au modèle. C'est pourquoi vous voyez ce que vous voyez dans la DB; whatever_id est juste un int et pas un "vrai" fk en vue. Ce n'est pas une erreur, par son design et sa un peu bizarre au premier abord. Généralement, la seule raison qui pousse les gens à travailler avec fks dans le niveau en DB, c'est quand la base de données est accessible par plus d'une application ou de son un ancien système.
Il y a beaucoup de discussion et quelques liens ici: Pourquoi ne Rails de migrations de définir des clés étrangères dans l'application, mais pas dans la base de données?
Il ne se sent bizarre. Finalement, vous voyez le sens de ce que. À l'adresse de votre vitesse de préoccupation ci-dessous, vous devriez faire un point de l'utilisation de la add_index commande dans votre migrations. Un fk ajoute un index de la base de données automatiquement. Dans les Rails il suffit d'ajouter vous-même en tant que de besoin... Si vous vous rappelez 🙂
Pour info fk = foreign key, int = intégrité
OriginalL'auteur mikewilliamson
Check this out: http://github.com/matthuhiggins/foreigner
Mais d'abord, assurez-vous que vous avez vraiment besoin d'eux (par exemple, l'intégrité référentielle est quelque chose qui, théoriquement, ne devrait pas se casser aussi longtemps que votre code est OK, et vous savez à propos de
:dependent => :destroy
et la différence entreuser.delete
etuser.destroy
).Je sais que c'est un gros vers dans les rails de la communauté, mais si vous utilisez mysql, il semble comme une évidence. Ce plugin fonctionne de manière impressionante.
FK in Rails == HAPPY
🙂BTW, les Rails sur le stand de fks n'affecte pas la vitesse de jointures, vous pouvez toujours définir un index sur un champ.
OriginalL'auteur glebm
Il y a un certain nombre de plugins disponibles (recherche google) pour les Rails qui vont créer des clés étrangères pour vous lorsque vous utilisez un symbole spécial dans votre migrations (foreign_key_migrations est l'un de l'Avancée des Rails livre de Recettes). Juste être conscient que les Rails ne joue pas bien avec ce concept, en particulier lorsque vous essayez de supprimer des objets (comme mentionné par glebm).
OriginalL'auteur simianarmy
Je viens de tomber sur ce post. Peut-être que quelqu'un va trouver utile. C'est ainsi que les contraintes sont créés:
http://guides.rubyonrails.org/migrations.html#using-reversible
OriginalL'auteur Extrapolator