Da würde mich auch mal ein vernünftiges Pattern für interessieren - wir machen es momentan mit einer halb-schmutzigen Herangehensweise:

- fat models, skinny controllers: Die Controller tun nicht viel, die meiste Logik steckt in den Modellen (das ist ja sowieso meistens eine gute Idee...), dazu gehören alle möglichen Methoden, um Daten einheitlich aufzubereiten, und vor allem finder-Methoden, die wir mit scope_out (einem Vorläufer von named_scope) bauen, in denen schon viel der Geschäftslogik steckt (z.B. scope_out :chapters, :conditions => ["status=? and container_type_id=?", STATUS[:published], TYPES[:chapter]], :order => "ordinal_number ASC", :include => [:container_type], in dem drin steckt, dass Kapitel immer publiziert sein müssen, einen bestimmten Typ haben und standardmäßig eine definierten Sortierung haben - das läßt sich ja bis zum Exzess treiben (http://blog.caboo.se/articles/2008/8/26/the-awesomest-filter-and-sort-ever ) - so weit, so sauber.

- (Achtung, hier wird's jetzt schmutzig): Dazu dann partials, die sich ihre Daten aus den Modellen ziehen und dann auf der Seite darstellen. Also z.B. mit for container in Container.find_chapters(:all) usw. - solche Konstrukte haben wir in verschiedensten Varianten im Einsatz, meistens mit der etwas abgemilderten Variante, dass der Controller dafür zuständig ist, ein Einstiegsobjekt zu finden (also z.B. einen Container zu laden und denn dann als @container dem view zur Verfügung zu stellen).

Auch wenn das Ganze nicht sehr sauber ist, kann man halbwegs vernünftig damit arbeiten: Die partials bleiben bei den views, zu denen sie ursprünglich gehören, normalerweise wissen sie nicht, wo und ob sie in verschiedenen Kontexten benutzt werden. Die Geschäftslogik bleibt an einer Stelle(nämlich in den Models), auch wenn der View jetzt etwas mehr Wissen über die Objektstrutur hat, als gut für ihn ist. Natürlich ist das Häresie wider die reine Lehre des MVC, vor allem weil der Controller in der Mitte ausgespart wird - aber zumindest für reine Anzeige-Sachen erfüllt das seinen Zweck.

Mann kann das von da aus sicher noch sehr viel weiter treiben (die partials nicht hart-kodieren, sondern von einem Helper auflösen lassen, Portlet als Model einführen usw.) und man muss sich was einfallen lassen, wenn's auch mal ein Update sein soll (das machen wir selten und wenn dann mit AJAX über die ursprünglichen Controller) - aber für einfache Fälle reicht das allemal....

Aber wie gesagt, mich würde da auch ein sauberer Ansatz interessieren....

Grüße
Stefan


Am 02.09.2008 um 00:51 schrieb Julian Stöver:

Hi!
Folgendes Problem: Ich habe ne Portalseite und möchte diese aus
verschiedenen Elementen der Seite zusammensetzen, als Beispiel jetzt mal
mit dem News und dem Umfrage Modul.
Doch wie realisiere ich das? Ich muss ja in meinem PortalController die Ressourcen für das Template zur Verfügung stellen. Ich möchte mich aber
mit dem Code fürs News auflisten nicht wiederholen, also habe ich
einfach mal versucht die Klasse vom NewsController direkt anzusteuern,
also hab News.index() aufgerufen. Macht Rails natürlich nicht mit, habs
auch schon fast erwartet.
Wie realisiere ich das Problem? Steh voll aufm Schlauch, wäre nett wenn
ihr mir helfen könnt!

Mfg
julian
--
Posted via http://www.ruby-forum.com/.
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

----
stefan frank
vierundsechzig.de
software&service
weberstr. 10
69120 heidelberg
tel. +49 (0) 6221 7277049
mobil +40 (0) 173 2383390
mail [EMAIL PROTECTED]
www.vierundsechzig.de



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

Antwort per Email an