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 = "<h1>Titel</h1>" 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 <tr> <td></td> <td></td> <td></td> </tr> 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 <tr> <td></td> <td></td> <td></td> </tr> 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.