2009-07-05 7 views
0

Ich habe Probleme beim Zuordnen von Modellen in DataMapper. Es ist wirklich einfach, aber ich kann nur die Idee bekommen.DataMapper has_one Problem

Also, ich habe 2 Tabellen:

1. Books 
-> id 
-> title 
-> publisher_id 

2. Publishers 
-> id 
-> title 

Die Klassen:

class Book 
    property :id, Serial 
    property :title, String 
    property :publisher_id, Integer 
end 

class Publisher 
    property :id, Serial 
    property :title, String 
end 

Also, die Frage ist: Wie kann ich Publisher Verbindung zu buchen? Es ist 1-zu-1-Beziehung, und das Ganze so aussehen soll:

vielleicht
p = Book.get(12345).publisher 

Leider ist es dumm. Aber ich kann nicht herausfinden, welche Art von Erklärung ich verwenden sollte.

Antwort

2

Haha, ich bin verrückt Idiot um 2 Uhr morgens zu sitzen. Immer passiert mir, wenn ich etwas frage - plötzlich finde ich selbst eine Antwort auf meine Frage.

Es ist falsch, es gibt eine Eins-zu-viele-Beziehung. So ist es einfach, wie Sonne am Himmel:

class Book 
    property :id, Serial 
    property :title, String 
    property :publisher_id, Integer 

    belongs_to :publisher 
end 

class Publisher 
    property :id, Serial 
    property :title, String 

    has n, :books 
end 

Hier geht es. Es könnte für jemanden hilfreich sein.

+0

Sowohl in ActiveRecord als auch in DataMapper wird die Tabelle mit dem Fremdschlüssel durch eine Klasse mit einer assignes_to-Zuordnung dargestellt. das entgegengesetzte Ende der Beziehung wird durch irgendeine Form einer "has" Assoziation dargestellt. In ActiveRecord kann dies entweder "has_one" oder "has_many" sein; in DataMapper "has (arity)", wobei arity eine beliebige Zahl (d. h. hat 1), einen Bereich (hat 2..4) oder unendlich (hat n) haben kann. –