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 – Brand new router with an emphasis on RESTful declarations – New Action Mailer API modeled after Action Controller – New Active Record chainable query language built on top of relational algebra – Unobtrusive Javascript helpers with drivers for Prototype and 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.

– Script/* 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 now uses a Gemfile in the application root to determine the gems you require for your application to start. This Gemfile is processed by the Bundler, which then installs all your dependencies. Bundler is a tool that manages gem dependencies for your ruby application. It is able to fetch, download, and install the gems and all child dependencies specified in the manifest file. The ‘gem install bundler’ command will install this gem. – All Rails core component have been decoupled. 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 – An Internationalization gem called the I18n gem has been introduced which is used to support programming in various regional languages. Générateurs – Generators were given a lot of attention in Rails 3.0. Some of the many changes and additions made were: Generators were completely rewritten and are backwards incompatible. Rails templates API and generators API are now merged. Generators are no longer loaded from special paths anymore, they are just found in the Ruby load path, so calling rails generate foo will look for generators/foo_generator. New generators provide hooks, so any template engine, ORM, test framework can easily hook in. New generators allow you to override the templates by placing a copy at RAILS_ROOT/lib/templates. Rails::Generators::TestCase is also supplied so you can create your own generators and test them. 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. You can now pass :notice => ‘This is a flash message’ or :alert => ‘Something went wrong’ to the format call inside a respond_to block. The flash[] hash still works as previously. respond_with method has now been added to your controllers simplifying the venerable format blocks. ActionController::Responder added allowing you flexibility in how your responses get generated. 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. – All email message related functionality have been abstracted out to the Mail gem. This reduces code duplication and helps create definable boundaries between Action Mailer and the email parser. – What were mailer unit tests have been moved to functional tests. – You can now send email using new API with three methods: attachments, headers and mail. 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 The addition of Arel now lets Active Record return relations on its methods. These relations can be chained together. A few of the methods which provide these are: where – provides conditions on the relation, what gets returned. select – choose what attributes of the models you wish to have returned from the database. group – groups the relation on the attribute supplied. having – provides an expression limiting group relations (GROUP BY constraint). joins – joins the relation to another table. clause – provides an expression limiting join relations (JOIN constraint). includes – includes other relations pre-loaded. order – orders the relation based on the expression supplied. limit – limits the relation to the number of records specified. lock – locks the records returned from the table. readonly – returns an read only copy of the data. from – provides a way to select relationships from more than one table. scope – (previously named_scope) return relations and can be chained together with the other relation methods. with_scope – and with_exclusive_scope now also return relations and so can be chained. An example using some of the above mentioned methods red_items = Item.where(:colour => ‘red’) red_items.find(1) item = red_items.new Now, giving an item.colour would give the output => red

red_items.exists? red_items.update_all :colour => ‘black’ red_items.exists? Gives an output=> false

Prenant un autre exemple

cars = Car.where(:colour => ‘black’) This would not give any query output. If we want to fire a select then we need to add the following cars.each {|c| puts 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’) end

And in your view : <% cache(‘recent_items’) do %> <% @recent_items.each do |item| %> … <% end %> In the above example, @recent_items are loaded on @recent_items.each call from the view. As the controller doesn’t actually fire any query, fragment caching becomes more effective without requiring any special work arounds. A few enhancements to the old API has also been done which are: Added :destroyed? to Active Record objects. SQLite 2 support has been dropped in favour of SQLite 3. MySQL support for column order. PostgreSQL adapter has had its TIME ZONE support fixed so it no longer inserts incorrect values. Support multiple schemas in table names for PostgreSQL. PostgreSQL support for the XML data type column. table_name is now cached. A large amount of work done on the Oracle adapter as well with many bug fixes. named_scope in an Active Record class is deprecated and has been renamed to just scope. In scope methods, you should move to using the relation methods, instead of

:conditions => {} finder method, for example scope :since, lambda {|time| where(“created_at > ?”, time) }. save(false) is deprecated, in favour of save(:validate => false). I18n error messages for ActiveRecord should be changed from :en.activerecord.errors.template to :en.errors.template. model.errors.on is deprecated in favour of model.errors[] validates_presence_of => validates. :presence => true ActiveRecord::Base.colorize_logging and config.active_record.colorize_logging are deprecated in favour of Rails::Subscriber.colorize_logging or config.colorize_logging find(:first) and find(:all) ( without any options ) are also being deprecated in favour of 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 Match method has been added to the router. Any Rack application can be passed to the matched route. Routes can be expressed via blocks, for example you can call controller :home { match ‘/:action’ }. Eg: map.connect ‘products/:id’, :controller => ‘catalog’,:action =>’view’ match ‘products/:id’ => ‘catalog#view’ While much of Rails 3 is seeing an internal rewrite, the Routes DSL has seen a complete revision in Rails 3. It has been rewritten from the ground up a few times before, and it has brought speed and flexibility with each iteration. The new DSL takes less keystrokes and looks clean. Here’s a typical RESTful route file in Rails 2: map.resources :products, :member => {:short => :post}, :collection => {:long => :get} do |products| products.resource :category end Here’s how it looks in 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 *

French
English
English
Japanese
German
French
Spanish

WhatsApp nous

Quitter la version mobile