2010-01-13 5 views
0

J'utilise datamapper dans une application ruby ​​et je suis confronté à un problème que je ne comprends pas.touche secondaire datamapper

J'ai un modèle d'appartement et un modèle de localisation. Un appartement est à un endroit donné et plusieurs appartements peuvent être au même endroit. Cela décrit typiquement une relation 1-n (je suppose :-))

Mon commentaire est que dans la table Appartement sql j'ai besoin d'un location_id mais je ne veux pas de pointeurs Appartement dans la table Location. Pour moi, Location devrait vivre de son propre chef et ne devrait pas faire référence à un appartement.

Dans la classe rubis Appartement, j'ai ajouté:

has n, Location 

mais il crée alors un appartment_id au sein de la classe rubis Lieu, que je ne veux pas.

Avez-vous la moindre idée?

Merci beaucoup, Luc

Répondre

1

Il est un à-plusieurs, mais pour le modèle d'emplacement, pas pour Appartement. Cela signifie que Location peut avoir plusieurs appartements et c'est ce que vous voulez, donc le modèle d'appartement aura location_id. Qu'est-ce que vous avez fait, c'est que vous avez dit datamapper que votre appartement a de nombreux endroits, donc il a ajouté appartment_id à Location.

Pour résoudre ce problème, vous pouvez ajouter:

has n, Appartment 

dans Localisation classe.

Je ne connais pas du tout le datamapper, mais dans Rails vous pouvez le définir dans les deux modèles. Dans l'appartement vous définissez quelque chose comme:

belongs_to Location 

et en Location vous ajoutez quelque chose comme mon premier exemple.

+0

Merci, je vais tester cela dès que je rentre chez moi :-) – Luc

1

Je dirais simplement

class Apartment 
    belongs_to :location 
end 

class Location 
    has n, :apartments 
end 

cela vous permettra de faire référence @ apartment.location et @ location.apartments

+0

aide les symboles sont également préférables à l'utilisation de classes. Ensuite, vous pouvez éviter les problèmes de commande de chargement – namelessjon