2009-12-12 5 views
3

J'ai beaucoup de situations où j'aimerais avoir une clé primaire non auto-incrémentée en utilisant Rails.Comment gérer une clé primaire non auto-incrémentée dans Rails?

Exemple: J'ai une à une relation entre A et B. B décrit certaines caractéristiques spécifiques ajoutées à A ne peut donc pas exister sans A. Nous avons donc:

A a un B
B appartient à A

La pensée naturelle serait d'avoir B.A_id comme clé primaire. J'ai donc essayé create_table b, :id=>false dans la migration et set_primary_key :a_id dans le modèle de B, mais il ne crée pas de clés primaires réelles dans la base de données. Et je les veux (ainsi que les clés étrangères), car la base de données sera utilisée non seulement par cette application Rails.

Si je crée des clés primaires avec l'exécution elles n'atterrissent pas dans schema.rb, ce qui fait mal. Maintenant, je pense à une solution de contournement: je peux vivre sans contrainte PK tant qu'il y a une contrainte unique pour cette colonne, donc je peux utiliser l'add_index de Rails dans la migration qui semble plus élégante.

Des suggestions?

+1

Pourquoi ne pas utiliser un schéma basé sur SQL? Bien sûr, ce n'est pas agnostique de base de données, mais l'agnosticisme de base de données est surestimé, surtout quand il vous empêche de faire les choses. –

Répondre

Questions connexes