2010-02-15 7 views
3

Dans les associations entre différents modèles, il est possible d'éviter de définir directement les ID de clé étrangère en utilisant les noms de montage comme dans this answer. Qu'en est-il des associations auto-référencées, comme lors de l'utilisation de acts_as_tree? Essayer ceci:Référencement des appareils du même type dans Rails

# categories.yml 
forsale: 
    name: For Sale 
    parent_id: nil 

books: 
    name: Books 
    parent: forsale 

Je reçois cette erreur:

SQLite3::SQLException: table categories has no column named parent: INSERT INTO "categories" ("name", "parent") VALUES ('Books', 'forsale') 

Est-il possible de faire un fixtures refence une autre dans la même classe sans utiliser ID explicites?

Mise à jour:

ajoutant le nom de classe entre parenthèses comme pour polymorphic belongs_to appareils ne fonctionne pas non plus. Faire ceci:

books: 
    name: Books 
    parent: forsale (Category) 

Produit un parent_id aléatoire pour books au lieu d'ID de forsale.

Répondre

2

Je l'ai fait plusieurs fois et je ne peux pas dire pourquoi cela ne fonctionne pas pour vous. Les appareils semblent corrects comme vous les avez (sans le polymorphe (Category)). L'association fonctionne-t-elle dans le reste de votre application? Quelle version de Rails utilisez-vous? Vous devriez avoir quelque chose comme ceci dans votre modèle Category:

belongs_to :parent, :class_name => "Category" 

Si vous voulez forcer juste à travailler, vous pouvez définir une parent_id explicite comme ceci:

books: 
    name: Books 
    parent_id: <%= Fixtures.identify :forsale %> 

mais c'est évidemment moins qu'idéal. ..

+0

Je suis tombé sur ceci aussi, parfois vos associations ne sont pas parfaites. – Garrett

+0

Ce Q est ancien, je pense que c'est [<% = ActiveRecord :: FixtureSet.identify (: forsale)%>] (http://edgeapi.rubyonrails.org/classes/ActiveRecord/FixtureSet.html#class-ActiveRecord: : FixtureSet-label-Fixture + étiquette + interpolation) maintenant. – mlt

Questions connexes