Après avoir travaillé avec ce problème pendant un certain temps, je ne pense pas que c'est une partie de la base Rails de la philosophie, que les clés étrangères ne doit pas être imposé par la base de données.
Le niveau d'application des validations et des vérifications sont là pour fournir facile, rapide, lisible par l'homme (pensez messages d'erreur) vérifie que le travail dans 99,99% du temps. Si votre application nécessite plus de cela, vous devez utiliser la base de données des contraintes de niveau.
Je pense que cette "philosophie" ont évolué en raison de l'analyse initiale des cadres utilisés: les clés étrangères seulement s'est avéré être un gigantesque tracas lors de l'utilisation de luminaires. C'est comme lors d'un "bug" devient une "fonctionnalité" parce que personne ne la corrige. (Si je suis misremembering de l'histoire, quelqu'un me corrige.)
Au minimum, il y a un mouvement de plus en plus au sein de la communauté Rails pour faire respecter l'intégrité de la base de données. Consultez cet article de blog du mois dernier. Elle a même des liens vers des plugins qui permettent d'offrir un soutien pour la gestion des erreurs (et un autre billet de blog que des liens vers d'autres plugins). Faire un peu plus de recherches avec Google; j'ai vu d'autres plugins qui ajoutent des migrations pour créer des clés étrangères, trop.
Maintenant, quelle est la partie de la base Rails philosophie est la suivante: Ne vous inquiétez pas sur les choses, sauf si vous avez réellement besoin. Pour beaucoup d'applications web, il est probablement ok si un de petite taille (minuscule) pourcentage d'enregistrements contenant des données non valides. Les Pages qui pourraient être affectées peuvent que très rarement être consultées, ou l'erreur peut être traitée correctement déjà. Ou peut-être que c'est moins cher (comme dans, l'argent comptant dur froid) afin de résoudre les problèmes par la main pour les 6 prochains mois alors que la demande croît que c'est de dépenser de l'élaboration de la planification des ressources pour toutes les éventualités maintenant. En fait, si votre cas d'utilisation ne pas le faire paraître tout important, et il peut vraiment être causée par une condition de concurrence qui peut arriver 1/10000000 demandes... eh bien, est-il utile?
Donc ma prédiction est que les outils de printemps pour gérer l'ensemble de la situation par défaut, et finalement ces obtiendrez fusionné dans Rails 3. En attendant, si votre application a vraiment besoin, ajoutez-les. Il va provoquer une légère tests de maux de tête, mais rien que vous ne pouvez pas obtenir avec des simulacres et des talons. Et si votre application n'a pas vraiment besoin... eh bien, vous êtes tous bien déjà. :)