2010-12-10 4 views
7

Je comprends que le champ id est créé par défaut et également: PRIMARY KEY ( id ).Qu'est-ce qui crée la contrainte FOREIGN KEY dans Ruby on Rails 3?

Que diriez-vous de la clé étrangère?

je Shops et Products tables et les associations suivantes:

Shop: has_many :products 
Product: belongs_to :shop 

En Product J'ai aussi:

t.integer "shop_id" 

qui est censé être la clé étrangère, et aussi:

add_index("products", "shop_id") 

Cependant, si j'exporte la base de données je vois sur ly:

KEY `index_products_on_shop_id` (`shop_id`) 

Que dois-je faire pour ajouter

FOREIGN KEY (`shop_id`) REFERENCES Shop(`id`) 

?

Répondre

16

Vous pouvez utiliser la gemme foreigner pour ajouter des clés étrangères à votre application. Pour commencer ajouter ce qui suit à votre Gemfile

gem "foreigner" 

Après cela, vous pouvez facilement ajouter des clés étrangères dans votre migration comme ceci:

add_foreign_key :products, :shops 

Cela ajouterait un étranger product.shop_id-shop.id. Voir la documentation pour plus d'options comme des clés nommées différemment ou des tables auto-référencées.