Rails de bienvenue 3.0

Depuis le 23 décembre 2008, le projet Merb (Mongrel + Erb) fusionne avec Rails, et une version avec les meilleures fonctionnalités des deux sera publiée en 2010 sous le nom Rails 3. Principaux ajouts dans Rails 3.0 – Tout nouveau routeur mettant l'accent sur les déclarations RESTful – Nouvelle API Action Mailer calquée sur Action Controller – Nouveau langage de requête chaînable Active Record construit sur l'algèbre relationnelle – Assistants Javascript discrets avec pilotes pour Prototype et jQuery

Presque toutes les propriétés de Rails ont été mises à niveau dans Rails 3.0. Ce qui suit répertorie toutes les propriétés, ainsi que leurs mises à niveau et ajouts à la version antérieure : Les changements fondamentaux sont les suivants : Rails 3.0 prend en charge uniquement Ruby 1.8.7 et supérieur Objet d'application Pour exécuter plusieurs applications Rails dans le même processus, un nouveau concept appelé objet Application a été introduit. Un objet application contient toutes les configurations spécifiques à l’application et est de nature très similaire à config/environment.rb des versions précédentes de Rails.

- Scénario/* Le nouveau script/rails remplace tous les scripts qui se trouvaient auparavant dans le répertoire des scripts. Par exemple : au lieu de script/console rails console au lieu de script/générer titre de message d'échafaudage : chaîne rails g titre de message d'échafaudage : chaîne Gemfile et Bundler Rails utilise désormais un Gemfile à la racine de l'application pour déterminer les gemmes dont vous avez besoin pour démarrer votre application. Ce Gemfile est traité par le Bundler, qui installe ensuite toutes vos dépendances. Bundler est un outil qui gère les dépendances des gemmes pour votre application Ruby. Il est capable de récupérer, télécharger et installer les gemmes et toutes les dépendances enfants spécifiées dans le fichier manifeste. La commande 'gem install bundler' installera cette gemme. – Tous les composants principaux de Rails ont été découplés. Les composants principaux de Rails utilisent désormais la même API que celle que vous pouvez utiliser pour développer des plugins. Cela signifie que tout plugin que vous créez peut accéder à toutes les fonctionnalités auxquelles les composants principaux de Rails ont accès. Les plugins ORM n'ont plus qu'à implémenter les interfaces Active Model pour fonctionner de manière transparente avec Action Pack. Arrel Arel est une interprétation orientée objet de l'algèbre des relations. Il fournit une abstraction SQL qui simplifie Active Record et constitue la base de la fonctionnalité de relation dans Active Record. Pour en savoir plus sur Arel, consultez la partie Active Record de l'article. Internationalisation – Une gemme d'internationalisation appelée gem I18n a été introduite et est utilisée pour prendre en charge la programmation dans diverses langues régionales. Générateurs – Les générateurs ont reçu beaucoup d'attention dans Rails 3.0. Certains des nombreux changements et ajouts effectués sont les suivants : Les générateurs ont été complètement réécrits et sont rétrocompatibles. L'API des modèles Rails et l'API des générateurs sont désormais fusionnées. Les générateurs ne sont plus chargés à partir de chemins spéciaux, ils se trouvent simplement dans le chemin de chargement Ruby, donc l'appel de rails generate foo recherchera générateurs/foo_generator. Les nouveaux générateurs fournissent des hooks, de sorte que n'importe quel moteur de modèle, ORM, framework de test peut facilement s'y connecter. Les nouveaux générateurs vous permettent de remplacer les modèles en plaçant une copie dans RAILS_ROOT/lib/templates. Rails::Generators::TestCase est également fourni afin que vous puissiez créer vos propres générateurs et les tester. Contrôleur d'action ActionController et ActionMailer ont été grandement simplifiés avec le code commun supprimé de toutes ces bibliothèques et placé dans un AbstractController. Abstract Controller extrait les parties génériques d'Action Controller dans un module réutilisable que n'importe quelle bibliothèque peut utiliser pour restituer des modèles, restituer des partiels, des assistants, des traductions, la journalisation, n'importe quelle partie du cycle de réponse à la demande. application_controller.rb a désormais protector_from_forgery activé par défaut. Le cookie_verifier_secret a été déplacé vers initializers/cookie_verification_secret.rb. La configuration session_store a été déplacée vers initializers/session_store.rb. cookies.secure vous permettant de définir des valeurs cryptées dans les cookies avec cookie.secure[:key] => valeur. cookies.permanent vous permettant de définir des valeurs permanentes dans le hachage du cookie cookie.permanent[:key] => valeur qui déclenche des exceptions sur les valeurs signées en cas d'échec de la vérification. Vous pouvez maintenant transmettre :notice => 'Ceci est un message flash' ou :alert => 'Quelque chose s'est mal passé' à l'appel de format à l'intérieur d'un bloc respond_to. Le hachage flash[] fonctionne toujours comme précédemment. La méthode respons_with a maintenant été ajoutée à vos contrôleurs, simplifiant les vénérables blocs de format. ActionController::Responder ajouté vous permettant une flexibilité dans la façon dont vos réponses sont générées. ActionMailer La création de AbstractController a permis à ActionMailer::Base d'hériter désormais simplement de AbstractController et d'envelopper simplement le Rails DSL sur la gemme Mail. Cela réduit considérablement la quantité de code et la duplication d'autres bibliothèques dans Action Mailer. – Toutes les fonctionnalités liées aux messages électroniques ont été extraites de la gemme Mail. Cela réduit la duplication de code et permet de créer des limites définissables entre Action Mailer et l'analyseur d'e-mails. – Les tests unitaires de messagerie ont été déplacés vers les tests fonctionnels. – Vous pouvez désormais envoyer des e-mails à l'aide de la nouvelle API avec trois méthodes : pièces jointes, en-têtes et courrier. ActionView Du JavaScript discret (UJS) a été implémenté et les anciennes commandes AJAX en ligne ont été supprimées. Cela permet à Rails d'utiliser n'importe quel pilote UJS conforme pour implémenter les hooks UJS dans les assistants. Cela signifie que tous les assistants distants précédents ont été supprimés du noyau Rails et placés dans le Prototype Legacy Helper. Pour obtenir des hooks UJS dans votre HTML, vous transmettez maintenant :remote => true à la place. Par exemple : form_for @post :remote => true Vous n'avez plus besoin d'appeler h(string) pour échapper à la sortie HTML, il est activé par défaut dans tous les modèles de vue. Si vous voulez la chaîne sans échappement, appelez raw(string). Les assistants affichent désormais HTML 5 par défaut. L'assistant d'étiquette de formulaire extrait désormais les valeurs de I18n avec une seule valeur, donc f.label :name extraira la traduction :name. L'étiquette de sélection I18n devrait maintenant être :en.helpers.select au lieu de :en.support.select. Vous n'avez plus besoin de placer un signe moins à la fin d'une interpolation Ruby dans un modèle ERb pour supprimer le retour chariot de fin dans la sortie HTML. Ajout de l'assistant grouped_collection_select à la vue Action. Action View déclenchera désormais des exceptions si les feuilles de style CSS et les fichiers javascript répertoriés dans les assistants javascript_include_tag et stylesheet_include_tag sont manquants. content_for? a été ajouté, vous permettant de vérifier l'existence du contenu dans une vue avant le rendu. Enregistrement actif L'ajout d'Arel permet désormais à Active Record de renvoyer des relations sur ses méthodes. Ces relations peuvent s’enchaîner. Quelques-unes des méthodes qui fournissent ces éléments sont : where – fournit des conditions sur la relation, ce qui est renvoyé. select – choisissez les attributs des modèles que vous souhaitez renvoyer de la base de données. group – regroupe la relation sur l’attribut fourni. avoir – fournit une expression limitant les relations de groupe (contrainte GROUP BY). joins – rejoint la relation avec une autre table. clause – fournit une expression limitant les relations de jointure (contrainte JOIN). inclut – inclut d’autres relations préchargées. order – ordonne la relation en fonction de l’expression fournie. limit – limite la relation au nombre d'enregistrements spécifié. lock – verrouille les enregistrements renvoyés par la table. lecture seule – renvoie une copie en lecture seule des données. from – fournit un moyen de sélectionner des relations dans plusieurs tables. scope – (anciennement nommé_scope) renvoie des relations et peut être enchaîné avec les autres méthodes de relation. with_scope – et with_exclusive_scope renvoient désormais également des relations et peuvent donc être chaînées. Un exemple utilisant certaines des méthodes mentionnées ci-dessus red_items = Item.where(:colour => 'red') red_items.find(1) item = red_items.new Maintenant, donner un item.colour donnerait le résultat => rouge

red_items.exists? red_items.update_all :colour => 'noir' red_items.exists? Donne une sortie => false

Prenant un autre exemple

cars = Car.where(:colour => 'black') Cela ne donnerait aucun résultat de requête. Si nous voulons lancer une sélection, nous devons ajouter les éléments suivants cars.each {|c| met c.name }

La relation ci-dessus est appelée chargement paresseux. Ceci est très utile avec la mise en cache des fragments. Donc, dans l'action de votre contrôleur, vous pouvez simplement faire

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

Et à votre avis : <% cache('recent_items') do %> <% @recent_items.each do |item| %> … <% end %> Dans l'exemple ci-dessus, @recent_items sont chargés sur @recent_items.each appel depuis la vue. Comme le contrôleur ne lance aucune requête, la mise en cache des fragments devient plus efficace sans nécessiter de solution particulière. Quelques améliorations de l'ancienne API ont également été apportées : Ajouté : détruit ? aux objets Active Record. La prise en charge de SQLite 2 a été abandonnée au profit de SQLite 3. Prise en charge de MySQL pour l'ordre des colonnes. L'adaptateur PostgreSQL a vu sa prise en charge TIME ZONE corrigée afin qu'il n'insère plus de valeurs incorrectes. Prend en charge plusieurs schémas dans les noms de table pour PostgreSQL. Prise en charge de PostgreSQL pour la colonne de type de données XML. table_name est maintenant mis en cache. Un gros travail effectué sur l'adaptateur Oracle ainsi que de nombreuses corrections de bugs. nommée_scope dans une classe Active Record est obsolète et a été renommée simplement en portée. Dans les méthodes de portée, vous devez utiliser les méthodes de relation, au lieu de

:conditions => {} méthode de recherche, par exemple scope :since, lambda {|time| où("created_at > ?", heure) }. save(false) est obsolète, au profit de save(:validate => false). Les messages d'erreur I18n pour ActiveRecord doivent être modifiés de :en.activerecord.errors.template à :en.errors.template. model.errors.on est obsolète au profit de model.errors[] validates_presence_of => validates. :presence => true ActiveRecord::Base.colorize_logging et config.active_record.colorize_logging sont obsolètes au profit de Rails::Subscriber.colorize_logging ou config.colorize_logging find(:first) et find(:all) (sans aucune option) le sont également étant déprécié au profit de first and all. Modèle actif Rails 2.3 possède une tonne de fonctionnalités vraiment intéressantes enfermées dans des composants monolithiques. Rails 3 a ouvert une grande partie de ces fonctionnalités dans ActionPack, facilitant ainsi la réutilisation du routeur, du répartiteur et des parties individuelles d'ActionController. Les validations ont été déplacées d'Active Record vers Active Model, fournissant une interface pour les validations qui fonctionne dans les bibliothèques ORM dans Rails 3. Il existe désormais une méthode de raccourci validates :attribute, options_hash qui vous permet de transmettre des options pour toutes les méthodes de classe validates, vous peut transmettre plusieurs options à une méthode de validation. La méthode validates a les options suivantes : :acceptance => Boolean. :confirmation => Booléen. :exclusion => { :in => Ennumérable }. :inclusion => { :in => Ennumérable }. :format => { :with => Regexp, :on => :create }. :length => { :maximum => Fixnum }. :numérique => Booléen. :présence => Booléen. :unicité => Booléen. ActionDispatch Une nouvelle et propre implémentation du routage est effectuée à l’aide d’ActionDispatch. Les itinéraires définis par chaque application sont désormais espacés de noms dans votre module Application. Par exemple : La première ligne du fichier routers.rb, c'est-à-dire ActionController : :Routing: :Routes.draw do |map| map.resources :post end a été remplacé par AppName : :Application.routes do resources :posts end La méthode de correspondance a été ajoutée au routeur. Toute application Rack peut être transmise à l'itinéraire correspondant. Les routes peuvent être exprimées via des blocs, par exemple vous pouvez appeler contrôleur :home { match '/:action' }. Par exemple : map.connect 'products/:id', :controller => 'catalog',:action =>'view' match 'products/:id' => 'catalog#view' Alors qu'une grande partie de Rails 3 fait l'objet d'une réécriture interne, le Routes DSL a connu une révision complète dans Rails 3. Il a été réécrit de fond en comble plusieurs fois auparavant, et il a apporté vitesse et flexibilité à chaque itération. Le nouveau DSL prend moins de frappes et semble propre. Voici un fichier de route RESTful typique dans Rails 2 : map.resources :products, :member => {:short => :post}, :collection => {:long => :get} do |products| products.resource :category end Voici à quoi cela ressemble dans Rails 3 : ressources : produits font ressource : catégorie le membre publie : courte fin la collection est obtenue : extrémité longue

De nombreux ajouts et modifications ont été apportés à de nombreuses propriétés de Rails. Bien qu'il soit peut-être trop tôt pour certains d'entre nous de changer d'avis sur les nouvelles API et leur syntaxe, l'ancien style de syntaxe fonctionne toujours grâce à une couche de compatibilité ascendante qui a été ajoutée. Cependant, cela sera supprimé dans la version Rails 3.1.

Prenez contact avec nous.

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench