2009-02-04 14 views
25

Sto leggendo su infissi Rails in questo guide (grazie, trevorturk). Sembra che tu definisca le classi in un file Yaml e che vengano automaticamente caricate nel DB test - cool.Infissi rotaie: come si impostano le chiavi esterne?

Ma se si desidera specificare che questa ricetta appartiene a quel libro di cucina (o qualsiasi altra cosa) come si fa?

Si suppone di specificare i valori per cookbook.id e recipe.cookbook_id a mano nel codice Yaml? (Solo una supposizione: la guida non mostra nulla del genere.) O c'è un modo più adatto?

risposta

53

È necessario utilizzare dispositivi denominati, che generano automaticamente un numero di ID per cui non ne viene fornito uno. Questi numeri di identificazione sono essenzialmente hash di qualsiasi stringa utilizzata. Non aggiungere il "_id" se stai riferimento la versione di nome:

# recipes.yml 
chicken_soup: 
    cookbook: my_recipes 

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

Va bene, ha funzionato. Grazie uomo. – Ethan

+0

Wow, è molto più semplice di quanto pensassi sarebbe :) Stavo cercando cose stupide come 'client_id: <% = contacts (: dave) .id%>' (che ovviamente non funziona). – Skilldrick

+3

Se si dispone di un ID con un nome diverso dall'oggetto (ad esempio my_cookbook_id), è possibile specificare la classe dell'oggetto in questo modo: 'my_cookbook: my_recipes (Cookbook)' –

1

Inoltre, se si desidera avere una relazione molti a molti associazione (HABTM) basta dare una matrice per l'associazione nel dispositivo :

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