Ruby on Rails 3-Kleinigkeiten

Nachfolgend eine Sammlung von Ruby on Rails 3-Kleinigkeiten, die den Umstieg von PHP-Programmierern auf diese Programmiersprache/dieses Framework erleichtern sollen.

Kommentare

Werden mit # eingeleitet.

Helper

Um die Views schlank zu halten, empfiehlt es sich, häufig benutzte (respektive umfangreiche) Funktionen in den jeweiligen Helper auszulagern. Eine gute Einleitung in die Thematik findet sich im Artikel Using helper methods in Ruby on Rails.

return fehlt

Das besondere an Ruby-Methoden: Das Resultat der letzten Zeile einer Methode wird automatisch zurückgegeben, man muss also keine aus anderen Sprachen gewohnte return-Anweisung notieren.

Helper HTML ausgeben lassen

Um mit Ruby on Rails 3 eine Helper-Methode HTML-Code zurückgeben zu lassen, muss das Resultat als „safe“ gekennzeichnet werden (via Ruby on Rails Helper Method – HTML is displayed as plain text). Ansonsten werden „<“ „>“ im Rückgabewert automatisch in HTML-Entities umgewandelt. Konkret:

def machHtml
html = " Titel "
html.html_safe
end

Heredoc

Wie PHP kennt auch Ruby die Heredoc-Notation (via Heredocs – oder – Code in der 2. Dimension), mit welcher man HTML-Code zeilenübergreifend notieren und Ruby-Variablen einfügen kann:

html = <<HTML





HTML

Das besondere ist hierbei, dass man bei der Angabe eines Bindestrichs „-“ beim Beginn des Heredocs den EOL auch einrücken kann, um den Programmcode lesbarer zu machen:

html = <<-HTML





HTML

Um in Heredoc Ruby-Variablen auszugeben, werden diese als #{variable} notiert.

Zahlen auf zwei Nachkommastellen gerundet ausgeben

rounded = "%.2f" % val

Seiten-Template

Das Template der Standardseite (HTML Header und Footer) ist unter ~/app/views/layouts/application.html.erb abgelegt.

Stylesheets einbinden

Sobald man ein CSS-Stylesheet in ~/public/stylesheets ablegt, wird dieses automatisch in das Template eingebunden.

Zeitzone

In ~/config/application.rb sollte man die richtige Zeitzone notieren:

...
config.time_zone = 'Bern'
...

Um den erwarteten Wert herauszufinden, bemüht man sich folgenden Befehls:

$ rake time:zones:local

locale

Um die locale auf Deutsch zu ändern, muss zuerst eine vorgefertigte locale-Datei heruntergeladen und in ~/config/locales abgelegt werden. Leider ist de-CH.yml kaputt, de.yml funktioniert hingegen:

$ cd ~/config/locales
$ wget --no-check-certificate "https://github.com/svenfuchs/rails-i18n/raw/master/rails/locale/de.yml"

Anschliessend passt man ~/config/application.rb an:

...
config.i18n.default_locale = :de
...

Deutsche Zeit ausgeben

Hierzu stellt Ruby on Rails 3 eine Locale-Funktion bereit:

l(date, :format => '%a %d.%m.%Y')

Sortierung in der index-Ansicht ändern

Im Controller der Applikation unter ~/app/controllers/stamps_controller.rb kann man nach dem Scaffolding natürlech eigene Anpassungen vornehmen:

def index
#@stamps = Stamp.all
@stamps = Stamp.find(:all, :order => 'date_start')

respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @stamps }
end
end

Mit @stamps = Stamp.find(:all, :order => 'date_start') macht man im Grunde dasselbe wie mit @stamps = Stamp.all, doch sortiert die Resultate datenbankseitig (!) bereits nach einem bestimmten Feld. Die Sortierrichtung kehrt man um, indem man noch DESC an den Befehl anhängt.