Ruby On Rails 2.0.x - Scaffolding in der neuen Version
Seit dem kürzlichen Rails-Update sind einige Tutorials hinfällig geworden, da das allseits beliebte Scaffolding (unter anderem) eine Generalüberholung erfahren hat. Nach einem Update ist es nunmehr vorgekommen, dass beim scaffolding der Fehler "Wrong number of arguments" auftauchte, der zunächst nicht erklärbar war. Aus diesem Grund möchte ich an dieser Stelle eine kurze Anleitung zur Verfügung stellen, wie nun in Zukunft damit gearbeitet werden kann.Â
Um herauszufinden, welche Rails-Version aktuell genutzt wird, so kann man dies mit folgendem Befehl in der Konsole:
rails -v
Als Ergebnis sollte man etwas in dieser Richtung sehen:
> rails 2.0.2
Ein Update von Rails ist so durchzuführen:
gem install rails -include-dependencies
Sollte allerdings gewünscht sein, eine alte Version von Rails zu nutzen, weil man bspw. ein noch nicht angepasstes Tutorial nacharbeiten möchte, so kann dies über folgenden Befehl in der Konsole getan werden:
gem install rails --include-dependencies --version 1.2.4
Wenn das neuere Rails 2.0.x installiert ist, ändert sich zwar einiges in der eigenen Entwicklung, aber - meiner Meinung nach - zum Besseren. Wie wir auch in Ruby On Rails gewöhnt sind :-)
Das "neue" Scaffolding und Datenbankhandling
Nachfolgend gehe ich davon aus, dass die Datei "config/database.yml" auf die korrekte(n) Datenbank(en) zeigt. Darüber hinaus muss nichts in der Datenbank selbst eingerichtet werden! Wir brauchen keine fertig erstellten Tabellen und dergleichen. Ferner gehe ich von einem momentan leeren Projekt aus, welches mittels....
rails testprojekt
... erstellt wurde und ohne Fehler die notwendige Ordnerstruktur aufgebaut hat.
Das Handling der Datenbank ist nun relativ einfach geworden und macht es kaum noch notwendig, per phpMyAdmin und SQL-Querys eigene Tabellen im bekannten Plural-/Singular-Modus von Rails aufzubauen. (Unter uns gesprochen, hat nicht jeder schonmal den Plural "Persons" aus dem Singular "Person" gebildet um dann verbittert festzustellen, dass Rails "People" erwartet hat? Ich hoffe, ich oute mich für eine gute Sache! :-) ) Stattdessen generiert man sein Model mittels Scaffolding und übergibt als Parameter die gewünschten Datenfelder.
In diesem Beispiel erstellen wir ein Model mit dem Namen Customer. Zusätzlich teilen wir Rails mit, dass wir die Felder "nachname", "hinweis" und "kundennr" benötigen:
ruby script/generate scaffold Customer nachname:string hinweise:text kundennr:integer
Rails hat nun im Ordner "db/migrate" eine Datei "xxx_create_movies.rb" erstellt, über die die Tabelle nebst Felder aufgebaut wird (neben dem eigentlichen Model nebst Views, wie wir es vom Scaffolding gewohnt sind).
Wenn wir nun ...
rake db:migrate
... in die Konsole eingeben, erstellt Rails die entsprechende Tabelle "movies" und ergänzt die zuvor angegebenen Felder. Das Ergebnis sollte dem entsprechen:
(in /home/web/workspace/testprojekt)
== 1 CreateMovies: migrating ==================================================
-- create_table(:movies)
-> 0.0040s
== 1 CreateMovies: migrated (0.0042s) =========================================
.
Wichtig ist hierbei, dass Rails die notwendigen (und/oder nützlichen) Felder "id", "created_at" und "updated_at" automatisch einfügt und wir lediglich unsere individuellen Felder beschreiben müssen.
Da manche Tabellen durchaus komplexer sein können, als dass sie in eine einzige Konsolenzeile passen würden, bietet es sich an, direkt in die Migration-Datei (im Ordner "db/migrate") alle Informationen zu schreiben:
Ein Beispiel von packtpub.com:
def self.up
create_table :people do |t|
t.column :title, :string
t.column :first_name, :string, :null => false
t.column :last_name, :string, :null => false
t.column :email, :string, :limit => 100, :null => false
t.column :telephone, :string, :limit => 50
t.column :mobile_phone, :string, :limit => 50
t.column :job_title, :string
t.column :date_of_birth, :date
t.column :gender, :string, :limit => 1
t.column :keywords, :string
t.column :notes, :text
t.column :address_id, :integer
t.column :company_id, :integer
t.column :created_at, :timestamp
t.column :updated_at, :timestamp
end
end
Die Literatur ist leider noch etwas hinterher und auch die Dokumentation kann gerade einem Newbie etwas verwirren, daher sei fortgeschrittenen RoR-Entwicklern diese, leider englischsprachige, Literatur empfohlen:
Zwei Blogbeiträge, die mir bei der Recherche geholfen haben, sind diese:
Beide sind auf englisch!
Viel Erfolg beim entwickeln!


[…] Da sich hier doch einige grundlegende Dinge im Scaffolding verändert haben (siehe meinen Beitrag “Ruby On Rails 2.0.x - Scaffolding in der neuen Version”) muss man bei der Bearbeitung von Tutorials darauf achten, mit welcher Rails-Version diese […]