Willkommen Rails 3.0

Ab dem 23. Dezember 2008 wird das Merb (Mongrel + Erb) Projekt mit Rails verschmolzen, und eine Version mit den besten Eigenschaften beider Projekte wird 2010 unter dem Namen Schienen 3. Die wichtigsten Neuerungen in Rails 3.0 - Brandneuer Router mit Schwerpunkt auf RESTful-Deklarationen - Neue Action Mailer API nach dem Vorbild von Action Controller - Neue verkettbare Abfragesprache für Active Record, die auf relationaler Algebra aufbaut - Unauffällige Javascript-Helfer mit Treibern für Prototype und jQuery

Fast jede Eigenschaft von Rails wurde in Rails 3.0 verbessert. Im Folgenden werden alle Eigenschaften und ihre Verbesserungen und Ergänzungen gegenüber der früheren Version aufgeführt: Zu den grundlegenden Änderungen gehören die folgenden: Rails 3.0 unterstützt nur Ruby 1.8.7 und höher Anwendungsobjekt Um mehrere Rails-Anwendungen im selben Prozess laufen zu lassen, wurde ein neues Konzept namens Application object eingeführt. Ein Application-Objekt enthält alle anwendungsspezifischen Konfigurationen und ist der config/environment.rb aus den früheren Versionen von Rails sehr ähnlich.

- Skript/* Das neue Skript/rails ersetzt alle Skripte, die sich bisher im Skriptverzeichnis befanden. Beispiel: statt script/console Schienen-Konsole statt script/generate scaffold post title:string rails g scaffold post title:string Gemfile und Bundler Rails verwendet nun ein Gemfile im Anwendungsstamm, um die Gems zu bestimmen, die Sie für den Start Ihrer Anwendung benötigen. Dieses Gemfile wird vom Bundler verarbeitet, der dann alle Ihre Abhängigkeiten installiert. Bundler ist ein Werkzeug, das Gem-Abhängigkeiten für Ihre Ruby-Anwendung verwaltet. Es ist in der Lage, die Gems und alle untergeordneten Abhängigkeiten zu holen, herunterzuladen und zu installieren. Gems und alle untergeordneten Abhängigkeiten, die in der Manifestdatei angegeben sind, abrufen, herunterladen und installieren. Der Befehl 'gem install bundler' installiert diesen Edelstein. - Alle Rails-Kernkomponenten sind entkoppelt worden. Die Rails-Kernkomponenten verwenden nun dieselbe API, die auch für die Entwicklung von Plugins verwendet werden kann, d.h. jedes von Ihnen erstellte Plugin kann auf alle Funktionen zugreifen, auf die auch die Rails-Kernkomponenten Zugriff haben. ORM-Plugins müssen jetzt nur noch Active Model-Schnittstellen implementieren, um nahtlos mit Action Pack zu arbeiten. Arel Arel ist eine objektorientierte Interpretation der Relation Algebra. Es bietet eine SQL-Abstraktion, die Active Record vereinfacht und die Grundlage für die Relation-Funktionalität in Active Record bildet. Mehr über Arel erfahren Sie im Active Record Teil des Artikels. Internationalisierung - Es wurde ein Internationalisierungs-Gem namens I18n-Gem eingeführt, das zur Unterstützung der Programmierung in verschiedenen regionalen Sprachen verwendet wird. Stromerzeuger - Generatoren wurde in Rails 3.0 viel Aufmerksamkeit geschenkt. Einige der vielen Änderungen und Ergänzungen waren: Die Generatoren wurden komplett neu geschrieben und sind nicht mehr rückwärtskompatibel. Die Rails-Templates-API und die Generatoren-API sind nun zusammengeführt. Generatoren werden nicht mehr aus speziellen Pfaden geladen, sie werden einfach im Ruby-Ladepfad gefunden, so dass der Aufruf von rails generate foo wird nach generators/foo_generator suchen. Die neuen Generatoren bieten Hooks, so dass jede Template-Engine, jedes ORM und jedes Test-Framework einfach eingebunden werden kann. Die neuen Generatoren erlauben es, die Templates zu überschreiben, indem eine Kopie in RAILS_ROOT/lib/templates abgelegt wird. Rails::Generators::TestCase wird ebenfalls mitgeliefert, damit Sie Ihre eigenen Generatoren erstellen und testen können. ActionController ActionController und ActionMailer wurden stark vereinfacht, indem gemeinsamer Code aus all diesen Bibliotheken entfernt und in einen AbstractController integriert wurde. AbstractController fasst die generischen Teile von ActionController in einem wiederverwendbaren Modul zusammen, das jede Bibliothek zum Rendern von Vorlagen, Renderpartials, Helfern, Übersetzungen, Logging und jedem Teil des Anfrage-Antwort-Zyklus verwenden kann. application_controller.rb hat jetzt protect_from_forgery standardmäßig aktiviert. Das cookie_verifier_secret wurde nach initializers/cookie_verification_secret.rb verschoben. Die session_store-Konfiguration wurde nach initializers/session_store.rb verschoben. cookies.secure ermöglicht es, verschlüsselte Werte in Cookies mit cookie.secure[:key] => value zu setzen. cookies.permanent ermöglicht das Setzen von permanenten Werten im Cookie-Hash cookie.permanent[:key] => value, die Ausnahmen für signierte Werte auslösen, wenn die Überprüfung fehlschlägt. Sie können jetzt :notice => 'Dies ist eine Flash-Nachricht' oder :alert => 'Etwas ist schief gelaufen' an den Formataufruf innerhalb eines respond_to-Blocks übergeben. Der flash[]-Hash funktioniert weiterhin wie bisher. Die respond_with-Methode wurde nun zu den Controllern hinzugefügt und vereinfacht die ehrwürdigen Formatblöcke. ActionController::Responder hinzugefügt, so dass Sie die Flexibilität, wie Ihre Antworten generiert werden. ActionMailer Die Erstellung des AbstractControllers ermöglichte es ActionMailer::Base, nun einfach von AbstractController zu erben und die Rails-DSL auf das Mail-Gem. Dies reduziert die Menge an Code und die Duplizierung von anderen Bibliotheken in Action Mailer erheblich. - Alle Funktionen, die sich auf E-Mail-Nachrichten beziehen, wurden in das Mail-Gem ausgelagert. Dies reduziert die Code-Duplizierung und hilft, definierbare Grenzen zwischen Action Mailer und dem E-Mail-Parser zu schaffen. - Die bisherigen Mailer-Unit-Tests wurden in funktionale Tests umgewandelt. - Sie können jetzt E-Mails über eine neue API mit drei Methoden versenden: Anhänge, Kopfzeilen und Mail. ActionView Unauffälliges JavaScript (UJS) wurde implementiert und alte Inline-AJAX-Befehle wurden entfernt. Dies ermöglicht es Rails, jeden kompatiblen UJS Treiber zu verwenden, um die UJS-Hooks in den Helfern zu implementieren. Das bedeutet, dass alle früheren remote_-Helper aus dem Rails-Kern entfernt und in den Prototype Legacy Helper. Um UJS Hooks in Ihr HTML zu bekommen, übergeben Sie jetzt :remote => true stattdessen. Beispiel: form_for @post :remote => true Sie müssen nicht mehr h(string) aufrufen, um die HTML-Ausgabe zu entschlüsseln, da dies in allen View-Templates standardmäßig aktiviert ist. Wenn Sie den unescapten String wollen, rufen Sie raw(string) auf. Hilfsprogramme geben jetzt standardmäßig HTML 5 aus. Die Formularbeschriftungshilfe zieht jetzt Werte aus I18n mit einem einzigen Wert, so dass f.label :name die :name Übersetzung zieht. I18n select label on sollte nun :en.helpers.select sein, statt :en.support.select. Es ist nicht mehr notwendig, ein Minuszeichen am Ende einer Ruby-Interpolation innerhalb einer ERb-Vorlage zu platzieren, um den nachgestellten Wagenrücklauf in der HTML-Ausgabe zu entfernen. Hilfsprogramm grouped_collection_select zu Action View hinzugefügt. Action View löst nun Ausnahmen aus, wenn CSS-Stylesheets und Javascript-Dateien, die in den javascript_include_tag und stylesheet_include_tag Helfern aufgeführt sind, fehlen. content_for? wurde hinzugefügt, um die Existenz von Inhalten in einer Ansicht vor dem Rendern zu überprüfen. Aktiver Rekord Durch die Hinzufügung von Arel kann Active Record nun Beziehungen zu seinen Methoden zurückgeben. Diese Beziehungen können miteinander verkettet werden. Einige der Methoden, die dies ermöglichen, sind: where - bietet Bedingungen für die Beziehung, was zurückgegeben wird. select - wählt die Attribute der Modelle aus, die aus der Datenbank zurückgegeben werden sollen. group - gruppiert die Beziehung nach dem angegebenen Attribut. having - liefert einen Ausdruck zur Begrenzung der Gruppenbeziehungen (GROUP BY-Beschränkung). joins - verknüpft die Beziehung mit einer anderen Tabelle. clause - liefert einen Ausdruck zur Begrenzung von Join-Beziehungen (JOIN-Beschränkung). includes - schließt andere vorgeladene Relationen ein. order - ordnet die Relation basierend auf dem angegebenen Ausdruck. limit - begrenzt die Relation auf die angegebene Anzahl von Datensätzen. lock - sperrt die aus der Tabelle zurückgegebenen Datensätze. readonly - gibt eine schreibgeschützte Kopie der Daten zurück. from - bietet eine Möglichkeit, Beziehungen aus mehr als einer Tabelle auszuwählen. scope - (früher_scope genannt) gibt Relationen zurück und kann mit den anderen Relationsmethoden verkettet werden. with_scope - und with_exclusive_scope geben jetzt auch Relationen zurück und können daher verkettet werden. Ein Beispiel, das einige der oben erwähnten Methoden verwendet red_items = Item.where(:Farbe => 'rot') red_items.find(1) Artikel = rot_Einzelteile.neu Die Angabe von item.color würde nun die Ausgabe => rot ergeben

red_items.exists? red_items.update_all :color => 'schwarz' red_items.exists? Ergibt eine Ausgabe=> false

Ein weiteres Beispiel

Autos = Auto.where(:Farbe => 'schwarz') Dies würde keine Abfrageausgabe ergeben. Wenn wir einen Select auslösen wollen, müssen wir Folgendes hinzufügen cars.each {|c| setzt c.name }

Die obige Beziehung wird als "lazy loading" bezeichnet. Dies ist sehr nützlich zusammen mit Fragment-Caching. In Ihrer Controller-Aktion könnten Sie also einfach Folgendes tun

def index @recent_items = Item.limit(10).order('created_at DESC') end

Und in Ihrer Ansicht : ... Im obigen Beispiel wird @recent_items beim Aufruf von @recent_items.each aus der View geladen. Da der Controller keine Abfrage auslöst, wird das Fragment-Caching effektiver, ohne dass spezielle Workarounds erforderlich sind. Es wurden auch einige Verbesserungen an der alten API vorgenommen, die da wären Hinzufügen von :destroyed? zu Active Record Objekten. Die Unterstützung von SQLite 2 wurde zugunsten von SQLite 3 aufgegeben. MySQL-Unterstützung für Spaltenreihenfolge. Beim PostgreSQL-Adapter wurde die TIME ZONE-Unterstützung korrigiert, so dass er keine falschen Werte mehr einfügt. Unterstützung mehrerer Schemas in Tabellennamen für PostgreSQL. PostgreSQL-Unterstützung für die XML-Datentyp-Spalte. table_name wird nun gecached. Auch am Oracle-Adapter wurde viel gearbeitet und viele Fehler behoben. named_scope in einer Active Record Klasse ist veraltet und wurde in scope umbenannt. In scope-Methoden sollten Sie dazu übergehen, die Relation-Methoden zu verwenden, anstelle von

:conditions => {} Finder-Methode, zum Beispiel scope :since, lambda {|time| where("created_at > ?", time) }. save(false) ist veraltet, zugunsten von save(:validate => false). I18n-Fehlermeldungen für ActiveRecord sollten geändert werden von :en.activerecord.errors.template in :en.errors.template geändert werden. model.errors.on ist veraltet zugunsten von model.errors[] validates_presence_of => validates. :presence => true ActiveRecord::Base.colorize_logging und config.active_record.colorize_logging werden veraltet zu Gunsten von Rails::Subscriber.colorize_logging oder config.colorize_logging find(:first) und find(:all) (ohne jegliche Optionen) werden ebenfalls zugunsten von first und all veraltet. ActiveModel Rails 2.3 hat eine Menge wirklich schöne Funktionalität in monolithischen Komponenten gesperrt. Rails 3 hat eine Menge dieser Funktionalität in ActionPack geöffnet, wodurch es einfacher ist, den Router, Dispatcher und einzelne Teile von ActionController wiederzuverwenden. Validierungen wurden von Active Record in Active Model verlagert, wodurch eine Schnittstelle zu Validierungen geschaffen wurde, die über ORM-Bibliotheken in Rails 3 hinweg funktioniert. Es gibt jetzt eine validates :attribute, options_hash shortcut Methode, die es erlaubt Optionen für alle Methoden der validates Klasse zu übergeben, es können mehrere Optionen an eine validate Methode übergeben werden. Die Methode validates hat die folgenden Optionen: :acceptance => Boolean. :confirmation => Boolescher Wert. :exclusion => { :in => Ennumerable }. :inclusion => { :in => Ennumerable }. :format => { :with => Regexp, :on => :create }. :length => { :maximum => Fixnum }. :numericality => Boolesch. :presence => Boolescher Wert. :uniqueness => Boolean. ActionDispatch Eine neue und saubere Implementierung des Routings erfolgt über den ActionDispatch. Die von den einzelnen Anwendungen definierten Routes sind nun innerhalb des Anwendungsmoduls namentlich voneinander getrennt. Beispiel: Die erste Zeile der Datei routers.rb, d.h. ActionController: :Routing: :Routes.draw do |map| map.resources :post end wurde ersetzt durch AppName: :Application.routes do ressourcen :post end Match-Methode wurde dem Router hinzugefügt. Jede Rack-Anwendung kann an die passende Route übergeben werden. Routen können durch Blöcke ausgedrückt werden, z.B. können Sie Controller :home { match '/:action' } aufrufen. Beispiel: map.connect 'products/:id', :controller => 'catalog',:action =>'view' match 'produkte/:id' => 'katalog#view' Während ein Großteil von Rails 3 eine interne Überarbeitung erfährt, wurde die Routes DSL in Rails 3 komplett überarbeitet. Sie wurde schon ein paar Mal von Grund auf neu geschrieben und hat mit jeder Iteration an Geschwindigkeit und Flexibilität gewonnen. Die neue DSL benötigt weniger Tastenanschläge und sieht sauber aus. Hier ist eine typische RESTful-Routendatei in Rails 2: map.resources :products, :member => {:short => :post}, :collection => {:long => :get} do |products| produkte.ressource :kategorie end So sieht es in Rails 3 aus: ressourcen :produkte do Ressource :Kategorie Mitglied tun post :short Ende Sammlung tun get :long end end

Es gibt viele Ergänzungen und Änderungen an einer Vielzahl von Eigenschaften von Rails. Obwohl es für einige von uns vielleicht noch zu früh ist, unsere Meinung über die neuen APIs und ihre Syntax zu ändern, funktioniert der alte Stil der Syntax aufgrund einer hinzugefügten Abwärtskompatibilitätsschicht noch. Diese wird jedoch in der Rails 3.1 Version entfernt werden.

Nehmen Sie Kontakt mit uns auf.

Abonnieren Sie die neuesten Updates

zusammenhängende Posts

Über den Autor des Beitrags

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEGerman