Beiträge getagged ‘Ruby’

[Rails] Fehler beim time_select in Formularen für eingebettete Models

26 August 2010

Eingebettete Modelle sind in Rails ein hervorragendes Mittel um Abhängigkeiten zwischen verschiedenen Entitäten herzustellen. Dafür sind die allseitsbekannten belongs_to sowie has_one und has_many aus dem ActiveRecord verantwortlich. Dazu noch ein accepts_nested_attributes und auf der Model-Ebene sind eingebettete Modelle kein Problem.

Wie sieht es aber im Formular zur Eingabe der Daten aus? Auch dort können problemlos mittels fields_for Eingabefelder für ein eingebettetes Model erzeugt werden. Das funktioniert Rails-typisch auch. Bis man auf die Idee kommt in den Eingabefeldern des eingebetteten Models ein time_select mit optionalen Parametern zu nutzen. Wird dem time_select kein optionaler Parameter mitgegeben, läuft die Anwendung wie erwartet. Nicht jedoch, wenn man zum Beispiel mittels :prompt => true den Anwender einen Hinweis geben möchte, was er in den Feldern auswählen kann. Denn dann werden die Parameter, welche von der Form an das Model und von dort an das eingebettete Model übergeben werden, nicht vollständig gefüllt und die Anwendung bricht mit dem Fehler 1 error(s) on assignment of multiparameter attributes ab.

Die Ursache liegt darin, dass Datum und Zeitangaben verkürzt gesagt, als einzelne Integerwerte an das Model gesendet werden. Dieses interpretiert nun die übermittelten Werte, sortiert nach dessen Index, als Jahr, Monat, Tag, Stunde, Minute und so weiter. Der Formhelper time_select hat nun den Fehler, dass wenn er mit optionalem Parameter genutzt wird, keine versteckten Eingabefelder mit den Werten 0 für das Jahr, den Monat und den Tag anlegt. Somit sind diese Werte, wenn sie im Model interpretiert werden, nicht deklariert und ActiveRecord streikt.

Abhilfe schafft dieser Patch für Rails. Nun ist es eine schlechte Idee sein Rails lokal zu patchen. Spätestens beim Deployment auf dem Server tritt der Fehler wieder auf. Also hilft hier nur, das entsprechend eingebettete Model direkt mit der im Patch enthaltenen Funktionalität auszustatten. Folgende Zeilen Code im Model erlauben ab sofort time_select Helper für das Model:

  def instantiate_time_object(name, values)
    if values.length == 2
      values = [ Date.today.year, Date.today.month, Date.today.day ] + values
    end
    super(name, values)
  end

Bleibt trotzdem zu hoffen, dass der Fehler in einer der nächsten Rails-Version behoben wird.

Ruby Summer of Code

27 März 2010

Ganz nach dem Vorbild vom Google Summer of Code, wird es diesen Sommer für Studenten auch die Chance geben, an Ruby und Ruby on Rails arbeiten zu können. Dazu haben sich Ruby Central, Engine Yard und das Rails Team zusammengeschlossen und den ersten Ruby Summer of Code ausgerufen.

» Weiterlesen: Ruby Summer of Code

Kostenloses eBook “Ruby Best Practices”

22 März 2010

“Ruby Best Practices” von Gregory T. Brown beschäftigt sich, wie der Name bereits vermuten lässt, mit der richtigen Programmierung von Ruby. Dabei beleuchtet der Autor in insgesamt 8 Kapiteln und 3 Anhängen die unterschiedlichsten Facetten der Ruby und Rails Programmierung. Test Driven Development findet sich ebenso in dem Buch wie die saubere Entwicklung schöner APIs oder Tips zum richtigen Projektmanagement.

» Weiterlesen: Kostenloses eBook “Ruby Best Practices”

Twitter liebt Open Source

24 Februar 2010

Was wäre Twitter ohne Open Source? Nicht existent. Der erfolgreiche Kurznachrichtendienst ist wohl eine der bekanntesten Anwendungen die größten Teils mit Ruby on Rails geschrieben sind. Bei solch einem Projekt bleiben Änderungen an vorhandener Software oder Komponenten nicht aus. Und über genau diese Änderungen an Open Source Projekten sowie Eigenentwicklungen von Twitter berichtet eine neu eingerichtete Website.

» Weiterlesen: Twitter liebt Open Source

NetBeans als Ruby on Rails IDE

3 Januar 2010

Auf der Suche nach der IDE für Ruby on Rails bin ich nach VIM und später Kate nun bei NetBeans gelandet. Die eigentlich für die Java-Entwicklung gedachte IDE aus dem Hause SUN ist auch hervorragend zum Entwickeln von Ruby und Ruby on Rails Anwendungen geeignet.

Installieren lässt sich die IDE auf Ubuntu einfach per

sudo aptitude install netbeans

Das beamt aber nicht die aktuelle Version 6.8 auf meinen Rechner, weshalb ich NetBeans doch lieber per Hand installiere. Dazu lade ich mir das Minimalpaket vom NetBeans Server herunter. Da NetBeans eine Java-IDE ist, verlangt der Installer nach einerm JDK, welches vor NetBeans auf dem Rechner installiert werden muss.

sudo aptitude install openjdk-6-jdk
sudo sh netbeans-6.8-ml-javase-linux.sh

Nach erfolgreicher Installation und erstem Start präsentiert sich NetBeans sehr aufgeräumt. Um nun Ruby und Rails Anwendungen entwickeln zu können, benötigt NetBeans noch ein Plugin. Das installiere ich bequem über Tools -> Plugins nach.

Danach bietet NetBeans alles, was das Rails-Entwicklerherz begehrt. Das Anlegen eines neuen Projektes übernimmt ein Assistent.

Den Entwickler unterstützt die IDE mit Syntax Highlighting, schneller Navigation zwischen Model, Controller, View und dazugehörigen Testklassen sowie eingebauter Hilfe. Selbst das wiederkehrende Ausführen von Tests via autotest unterstützt die IDE. Auch das Anlegen neuer Models, Controller, Tests und Scaffolds übernimmt ein leicht zu bedienender Assistent.

Ich entwickle nun schon seit einigen Wochen Rails-Anwendungen mit NetBeans und bin immer noch begeistert. Die vielen kleinen nützlichen Helferlein der IDE nehmen mir viel Routinearbeit ab und unterstützen mich beim schnellen Navigieren in den Dateien. Scheint, als hätte ich meine Rails IDE fürs Erste gefunden. Oder gibt es Killer-Features anderer IDEs, die ich noch nicht kenne und unbedingt brauche?

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Deutschland
This work by Andreas Richter is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Deutschland.