Das ist eine schöne Frage, nach einer vernünftigen Antwort darauf hab ich jetzt auch schon länger mal gesucht. Was tieferes Nesting von Ressourcen angeht scheint da kaum jemand Erfahrungen gemacht zu haben. Wir sind dannn hier den Weg gegangen, das einfach mal zu versuchen und sind da bislang eigentlich sehr zufrieden mit.

Wir kommen hier mittlerweile auf ein Nesting von 5 Ebenen - eigentlich finde ich das immer noch handlebar, solange es logisch zur Anwendung passt. Von diesen Ebenen werden die obersten beiden (bei uns sind das Projekt und Container) über einen beforefilter im applicationController verwaltet, darunter wird es dann so spezifisch, dass die Controller selber dafür sorgen, dass alle Objekte im Pfad richtig geladen sind.

Nur wegen dieser Pfad-Geschichte das Model zu verdrehen halte ich für keine so gute Idee: Zumindest bei uns ist es so, dass wir an die obersten beiden Ebenen sehr viele verschiedene Sachen im Laufe des Projekts drangehängt haben - zumindest bei uns hätte das also nicht funktioniert, das in eins der unteren Modelle zu stecken.

Den Artikel mit den drei Ebenen fand ich auch nicht sooo plausibel: Wenn es die Ressourcen logisch nur genestet gibt, dann gibt's eigentlich auch keinen Grund (abgesehen von der Zeichenbegrenzung der URL) warum die Route das nicht wiedergeben sollte. Ich entscheide das jetzt eher von der Benutzung des Modells her: Ist es eine Containment- Beziehung, das heißt wählt man z.B. erst einen Container aus, um dann viele verschiedene Ressourcen dranzuhängen, dann wird genestet. Wenn man von der Ressource kommt und diese Ressource dann am Ende nur noch eine Referenz braucht, dann kommt die Ressource ganz oben in die route und die Referenz wird nur über ein Drop-Down gemacht. (Legt man ein neues Kino an und gibt dann da eine Stadt an oder geht man in ein Land, wählt eine Stadt aus und legt dann in dieser Stadt ein neues Kino an? Das klingt für mich eher ein bisschen danach Land und Stadt zu nesten und die Kinos nach oben zu schieben....)

Böse Stolperfalle fand ich dann aber auch die Pfade: Da sollte man frühzeitig dafür sorgen, dass man Pfade wie

question_path(@project, @container, @question.quiz, @question)

in helper  auslagert, weil man ansonsten damit die hierarchie festlegt.


Was das XML angeht: Hier bin ich nicht so sicher, ob die Struktur des XML, das man haben will so ein guter Ratgeber für das Design der Routes ist. Ich hatte eigentlich auch gedacht, dass ich das meinen ressourcen dann einfach to_xml sage und dann produzieren die schon das richtige, bin dann aber am Ende doch bei einem eigenen Controller für spezielle Ansichten gelandet: Die ziehen jetzt builder-templates, in denen ich das xml von Hand schreibe, so wie es die Clients brauchen....

Na, soviel erstmal zu meinen Erfahrungen mit nested resources - würd mich brennend interessieren, wie der Rest der Welt das handhabt!

Viele Grüße
Stefan

PS: Schönes Thema sind auch nested ressources zusammen mit acts_as_tree :)



Am 14.08.2007 um 00:50 schrieb Philipp Rosenkranz:

Hallo

Ich frage mich was besser ist bei folgender Problematik:
(Ist kein echtes Projekt nur eine Übung bzw. ein Experiment)

Es müssen Kinos (inkl. der dort laufenden Filme) nach Ländern (und
Städten) geordnet angezeigt werden.
Außerdem soll eine Übersicht über alle Daten möglich sein (hierarchisch). (inkl. XML Export aller Daten oder nur nach country bzw. city oder cinema )

Da das alles eine verschachtelte Struktur ist dachte ich sofort an
nested resources im sinne von:

 map.resources :countries do |country|
    country.resources :cities do |city|
      city.resources :cinemas do |cinema|
        cinema.resources :movies
      end
    end
  end


Nun muss man aber bei so tief verschachtelten resourcen ( eventuell
wirds noch tiefer :-(  )
sehr viel von hand schreiben ( path's anpassen, finds anpassen,
before_filter um die übergeordnete(n) model id('s) zu finden, usw ... )
Daher frage ich mich ob ich country und city als eigene resource (bzw.
model) behandeln soll oder ob ich diese nicht einfach in das cinema
model verfrachten soll.
(country und city haben jeweils nur ein "richtiges" Attribut:
"name:string" )

Aber dann frage ich mich was ich machen soll
wenn z.B.:  etwas wie: "country  has_many  :notes" dazukommt ...

Die Übersicht würde ich dadurch gewährleisten ,dass jede resource
im view ihre child resources anzeigt.
(So würde man auf /countries Eine Übersicht mit allen Ländern, den darin
enthaltenden Städten und den wiederum in den Städten zu finden Kinos
usw. angezeigt bekommen)
Ist das der rails way oder geht das auch einfacher bzw. etwas mehr DRY?


P.S.: Mein erster Post hier daher nen paar Infos über mich:
Wohne in Berlin und komme aus dem Network bzw. System Administrations
Bereich (bin CCNA u. LPIC-2). Beschäftige mich aber auch seit einigen
Jahren mit Web Programmierung ( hauptsächlich PHP ).

P.P.S.: Ich hab mir schon einige Tutorial's zu dem Thema nested
resources angesehen (natürlich auch DAS Buch gelesen) jedoch nie
Beispiele gefunden die So tief verschachtelte resourcen gezeigt haben.
In einem Blog wurde sogar davor gewarnt tiefer als drei Ebenen zu gehen
(leider ohne Angabe warum)...


Grüße

Philipp










                
___________________________________________________________
Telefonate ohne weitere Kosten vom PC zum PC: http:// messenger.yahoo.de
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an