Einführung in Ruby on Rails
def vote @updates = 0 if params params.each { |name, value| if name =~ /^vote(.*)/ @updates += 1 index = $1.to_i # Bisherige Stimmen ermitteln drink = Drink.find(index) voters = drink.voters.to_i points = drink.points.to_i # Aktualisieren drink.update_attribute(:voters, voters + 1) drink.update_attribute(:points, points + value.to_i) end } end @updates end
params enthält die Formulardaten in Form eines assoziativen Arrays, das sich durch each
mit zwei Parametern auslesen lässt. Beginnt ein Parameter mit vote
, dann wird der Datensatz mit dem entsprechenden Index ausgelesen und aktualisiert.
Die View vote.rhtml ist dagegen sehr kurz - sie zeigt die vom Controller veröffentlichte Anzahl der Aktualisierungen an und produziert einen Link zurück zur Tabelle. Hier nur die wichtigen Zeilen; die HTML-Umrandung können Sie wie oben erzeugen.
<%= @updates %> <%= @updates == 1 ? "Datensatz" : "Datensätze" %> aktualisiert.<br /> <br /> <%= link_to("Tabelle", {:action => 'table'}) %>
Starten Sie nun wieder den Testserver und rufen Sie http://localhost:3000/drink/table auf. Die Tabelle erscheint, allerdings noch ohne Ergebnisse. Wenn Sie ein paarmal für eine oder mehrere Sorten abstimmen, werden die entsprechenden Werte angezeigt.
Fortsetzung
In der Fortsetzung im nächsten Teil geht es um das Deployment der Anwendung mit Apache, Ajax-Effekte und ein freundlicheres Styling mit CSS.