2009-02-04 16 views
25

Je lis sur les appareils Rails dans ce guide (merci, trevorturk). Il semble que vous définissiez des classes dans un fichier Yaml et qu'elles soient automatiquement chargées dans la BD test - cool.Rails fixtures - comment définir les clés étrangères?

Mais si vous voulez spécifier que cette recette appartient à ce livre de cuisine (ou autre), comment faites-vous cela?

Êtes-vous censé spécifier les valeurs pour cookbook.id et recipe.cookbook_id à la main dans le code Yaml? (Juste une supposition - le guide ne montre rien comme ça.) Ou y at-il un moyen plus approprié?

Répondre

53

Vous devez utiliser des appareils nommés, qui génèrent automatiquement un numéro d'identification pour vous là où vous n'en avez pas. Ces numéros d'identification sont essentiellement des hachages entiers de n'importe quelle chaîne que vous utilisez. Ne pas ajouter le « _id » si vous faites référence à la version nommée:

# recipes.yml 
chicken_soup: 
    cookbook: my_recipes 

# cookbooks.yml 
my_recipes: 
    title: My Test Cookbook 
+0

Tout droit qui a réellement fonctionné. Merci mec. – Ethan

+0

Wow, c'est beaucoup plus simple que je pensais que ce serait :) J'essayais des trucs idiotes comme 'client_id: <% = contacts (: dave) .id%>' (ce qui évidemment ne fonctionne pas). – Skilldrick

+3

Si vous avez un ID différent de l'objet (par exemple my_cookbook_id), vous pouvez spécifier la classe de l'objet comme suit: 'my_cookbook: my_recipes (Cookbook)' –

1

De plus, si vous souhaitez avoir une association plusieurs à plusieurs (HABTM) que vous venez de donner un tableau pour l'association dans le dispositif :

# recipes.yml 
chicken_soup: 
    cookbooks: [my_recipes, another_recipe]