« Rails 2.0 ftw | Main | API gefällig? »

Wie es ist und wie es sein sollte...

Das schwierigste an Rails ist mitunter, dass man es "schön" machen will, dem "Rails-way" entsprechend. So gibt es ein paar Sachen, die kann man irgendwie programmieren, aber die man natürlich einfach und elegant lösen will. So wie es sein sollte. Da kann man dann auch schonmal gut Zeit mit Suchen nach der besten Lösung verbringen...

Wie ihr wisst, arbeite ich gerade an der Rails-Version der Anwendung und da ich ganz gut voran kam, habe ich in den letzten Tagen nicht wirklich intensiv gearbeitet. Aber der Counter da rechts zählt unbarmherzig weiter runter, also Schluss mit lustig und weiterarbeiten.

Für "Pagination" (gibts da ein anständiges deutsches Wort für?) verwende ich das plugin will_paginate und das funktioniert auch einwandfrei. Ich frage mich jedoch wie ich damit eine Collection "paginaten" kann, die nicht als Abfrage aus der Datenbank kommt. Geht das? Anscheinend baut will_paginate auf find(:all) auf und verändert nur das Array so, dass es auch Informationen zu aktuellen Seite enthält.

Interessanter Weise habe ich ein paar Dinge entdeckt, die man in JavaEE konfigurieren konnte und ich in Rails selber programmieren muss außer es gibt ein plugin... (oder gibts nen Trick/"Rails-way"?)
Gibt es zum Beispiel in Rails etwas äquivalentes zu der Angabe der Customer-Rating-Beziehung "@OneToMany(cascade = CascadeType.REMOVE ...."? D.h. wenn ich einen Customer lösche, werden automatisch auch alle Ratings zu diesem Customer gelöscht.
In Rails würde ich jetzt in der destroy-Methode im customer-controller dafür sorgen, dass auch alle Ratings gelöscht werden. Gibt es einen eleganten Weg dies zu erledigen, oder muss ich tatsächlich jedes Rating (und dann natürlich auch jeden Fact eines Ratings) durchgehen und löschen?

(Nochmal grob zur Erinnerung: customer -hasmany-> ratings -hasmany-> facts -belongsto-> factType)

Ein anderes Problem ist zur Zeit die Umsetzung der Rating-Detail-Ansicht. Hier hatte ich in JavaEE eine Liste aller Fakttypen angelegt und dann angezeigt ob in diesem Rating der Fakt eingetragen wurde oder noch leer ist. (Dort hatte ich die Collection von Facts des Ratings aus der Datenbank und habe dann für alle nicht vorhandenen FactTypen Einträge hinzugefügt. Die Darstellung der überarbeiteten Collection samt pagination hat dann die entsprechende JSF-Komponente übernommen.)

Tja, wie löse ich das jetzt mit Rails? Insbesondere mit pagination? Ich bräuchte im Prinzip alle facts des ratings und dies mit einem right outer join verknüpft mit fact_types. Also so, dass von jedem FactType ein Fact für das Rating aufgelistet wird, ob es nun schon eingetragen ist oder nicht. (deshalb outer join)
Ob das nun verständlich war, wage ich zu bezweifeln.
Aber ich habe eine Idee und werde das auch sogleich mal angehen...

Comments (3)

das Kaskadieren machst du mit :dependend => :destroy (steht in der API wunderbar beschrieben ;-)) und das Paginieren von Collections geht ganz einfach mit dem Paginator-Gem: http://paginator.rubyforge.org/ (also Ruby, nicht Rails ;-)):

per_page = 10
collection = (1..20).to_a
pager = Paginator.new(collection.size, per_page do |offset, per_page|
collection[offset..offset+per_page]
end
@page = pager.page(params[:page])

und in der View:
<% for i in @page %>
<p><%= i %></p>
<% end %>
<%= link_to @page.next, :page => @page.next.number %>

Have Fun!

Gerald Schenke:

Danke für die Tipps!

Für die Geschichte mit den Facts hab ich jetzt im rating-Model eine Methode:

def get_fact_with_factType(factType)
fact = Fact.find(:first, :conditions => ["factType_id = ? AND rating_id = ?", factType.id, self.id])
if fact.nil?
fact = Fact.new
fact.factType = factType
fact.rating = self
end
fact
end

ich hoffe die ist dort richtig. Jedenfalls funktioniert es :)

Gerald Schenke:

Ich musste bei deinem Kommentar die < in &lt; ändern.

Tja, dann klappt ja jetzt fast alles. Und auch wesentlich einfacher, effizienter und schöner als mit JavaEE, aber was habe ich erwartet....

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)

About

This page contains a single entry from the blog posted on 22.01.08 22:24.

The previous post in this blog was Rails 2.0 ftw.

The next post in this blog is API gefällig?.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31