2011-01-16 6 views
0
class Task 
    include DataMapper::Resource 
    has 1, :list, :through => Resource 
end 

class List 
    include DataMapper::Resource 
    has n, :tasks, :through => Resource 
end 

Eine Liste hat viele Aufgaben. Angenommen, ich habe eine Aufgabe mit der ID = 1.DataMapper => 1: n-Filter

Wie kann ich die Liste mit dieser Aufgabe finden?

Ich habe versucht: List.first (: Aufgaben => Aufgabe), aber es gibt immer Null zurück.

Vielen Dank.

Antwort

1

was ist mit Task.first(:id => 1).list? Übrigens sollten Sie die Definitionen Ihrer Modelle wirklich ändern. Ich empfehle Ihnen, die Datamapper-Dokumentation thoroughly zu lesen.

class Task 
    include DataMapper::Resource 

    belongs_to :list 
end 

class List 
    include DataMapper::Resource 

    has n, :tasks 
end 

Sieht das nicht viel schöner aus? Oh und ich hoffe du hast Schlüssel definiert. Diese sind wichtig für gut funktionierende Verbände. Und wenn id der Schlüssel für Task ist, würde Ihre Abfrage zu Task.get(1).list vereinfachen.

0

Sie können eine verschachtelte Bedingung wie folgt verwendet:

List.first(:tasks => { :id => task.id }) 

aber eine Aufgabe gegeben es einfacher sein würde task.list

0

Warum verwenden Sie haben 1 bis Ressource hat? Ich würde Task.belongs_to tun: Liste und dann List.has n: Aufgaben, so dass Sie schreiben können:

List.first :"tasks.id" => task.id 

Obwohl, wenn Sie bereits die Aufgabe bekommen, dann ist es einfacher, nur task.list schreiben :)