Bienvenidos Rails 3.0

A partir del 23 de diciembre de 2008, el proyecto Merb (Mongrel + Erb) se fusionará con Rails, y en 2010 se lanzará una versión con las mejores características de ambos con el nombre Rieles 3. Principales adiciones en 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

Casi todas las propiedades de Rails se han actualizado en Rails 3.0. A continuación se enumeran todas las propiedades y sus actualizaciones y adiciones a la versión anterior: Los cambios básicos incluyen lo siguiente: Rieles 3.0 solo admite Ruby 1.8.7 y superior Objeto de aplicación Para ejecutar varias aplicaciones Rails en el mismo proceso, se ha introducido un nuevo concepto llamado objeto Aplicación. Un objeto de aplicación contiene todas las configuraciones específicas de la aplicación y es de naturaleza muy similar a config/environment.rb de las versiones anteriores de Rails.

– Script/* El nuevo script/rails reemplaza todos los scripts que solían estar en el directorio de scripts. Por ejemplo: en lugar de script/consola, rieles de consola en lugar de script/generar título de publicación de andamio: rieles de cadena g título de publicación de andamio: cadena Archivo de gemas y paqueter 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. Los componentes principales de Rails ahora usan la misma API que usted puede usar para desarrollar complementos. Esto significa que cualquier complemento que cree puede acceder a todas las funciones a las que tienen acceso los componentes principales de Rails. Los complementos ORM ahora solo necesitan implementar interfaces Active Model para funcionar sin problemas con Action Pack. arel Arel es una interpretación orientada a objetos del álgebra de relaciones. Proporciona una abstracción de SQL que simplifica Active Record y proporciona la base para la funcionalidad de relación en Active Record. Se analiza más sobre Arel en la parte de Registro activo del artículo. Internacionalización – An Internationalization gem called the I18n gem has been introduced which is used to support programming in various regional languages. Generadores – 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. Controlador de acción ActionController y ActionMailer se han simplificado enormemente al eliminar el código común de todas estas bibliotecas y colocarlo en un AbstractController. Abstract Controller extrae las partes genéricas de Action Controller en un módulo reutilizable que cualquier biblioteca puede usar para representar plantillas, representar parciales, ayudas, traducciones, registros y cualquier parte del ciclo de respuesta a la solicitud. application_controller.rb ahora tiene protect_from_forgery activado de forma predeterminada. El cookie_verifier_secret se ha movido a inicializadores/cookie_verification_secret.rb. La configuración de session_store se ha movido a inicializadores/session_store.rb. cookies.secure le permite establecer valores cifrados en las cookies con cookie.secure[:key] => valor. cookies.permanent le permite establecer valores permanentes en el hash de la cookie cookie.permanent[:key] => valor que genera excepciones en los valores firmados si falla la verificación. 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. AcciónMailer La creación de AbstractController permitió a ActionMailer::Base ahora simplemente heredar de AbstractController y simplemente envolver Rails DSL en la gema Mail. Esto reduce considerablemente la cantidad de código y la duplicación de otras bibliotecas en 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. Vista de acción Se implementó JavaScript discreto (UJS) y se eliminaron los antiguos comandos AJAX en línea. Esto permite a Rails utilizar cualquier controlador UJS compatible para implementar los ganchos UJS en los ayudantes. Lo que significa que todos los ayudantes remotos anteriores se eliminaron del núcleo de Rails y se colocaron en Prototype Legacy Helper. Para obtener ganchos UJS en su HTML, ahora pase :remote => true en su lugar. Por ejemplo: form_for @post :remote => true Ya no necesita llamar a h(string) para escapar de la salida HTML, está activado de forma predeterminada en todas las plantillas de vista. Si desea la cadena sin escape, llame a raw(string). Los ayudantes ahora generan HTML 5 de forma predeterminada. El asistente de etiqueta de formulario ahora extrae valores de I18n con un solo valor, por lo que f.label :name extraerá la traducción :name. I18n seleccione la etiqueta ahora debería ser :en.helpers.select en lugar de :en.support.select. Ya no es necesario colocar un signo menos al final de una interpolación Ruby dentro de una plantilla ERb para eliminar el retorno de carro final en la salida HTML. Se agregó el asistente grouped_collection_select a la Vista de acciones. La Vista de acción ahora generará excepciones si faltan las hojas de estilo CSS y los archivos javascript enumerados en los ayudantes javascript_include_tag y stylesheet_include_tag. contenido_para? Se ha agregado que le permite verificar la existencia de contenido en una vista antes de renderizarla. Registro activo 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

Tomando otro ejemplo

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 relación anterior se llama carga diferida. Esto es muy útil junto con el almacenamiento en caché de fragmentos laterales. Entonces, en la acción de tu controlador, podrías simplemente hacer

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. Modelo activo Rails 2.3 tiene un montón de funcionalidades realmente interesantes encerradas en componentes monolíticos. Rails 3 ha abierto gran parte de esa funcionalidad en ActionPack, facilitando la reutilización del enrutador, el despachador y partes individuales de ActionController. Las validaciones se han movido de Active Record a Active Model, lo que proporciona una interfaz para las validaciones que funciona en todas las bibliotecas ORM en Rails 3. Ahora hay un método abreviado de validaciones: atributo, opciones_hash que le permite pasar opciones para todos los métodos de clase de validación. Puede pasar más de una opción a un método de validación. El método de validación tiene las siguientes opciones: :aceptación => Booleano. :confirmación => Booleano. :exclusión => { :in => Ennumerable }. :inclusión => { :in => Ennumerable }. :formato => { :con => Regexp, :on => :crear }. :longitud => { :máximo => Fixnum }. :numericalidad => booleano. :presencia => Booleano. :singularidad => booleano. Despacho de acción Se realiza una implementación nueva y limpia del enrutamiento utilizando ActionDispatch. Las rutas definidas por cada aplicación ahora tienen nombres espaciados dentro de su módulo de Aplicación. Por ejemplo: la primera línea del archivo routers.rb, es decir, ActionController: :Routing: :Routes.draw do |map| map.resources: final de la publicación ha sido reemplazado por AppName:: Application.routes do resources: final de las publicaciones 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: recursos: productos hacen recurso: categoría miembro publica: final corto la colección obtiene: final largo

Se han realizado muchas adiciones y cambios a muchas propiedades de Rails. Aunque puede que sea demasiado pronto para que algunos de nosotros cambiemos nuestra visión sobre las nuevas API y su sintaxis, el antiguo estilo de sintaxis todavía funciona debido a una capa de compatibilidad con versiones anteriores que se ha agregado. Sin embargo, esto se eliminará en la versión Rails 3.1.

Póngase en contacto con nosotros.

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Spanish
English
English
Japanese
German
French
Spanish

envíanos whatsapp

Salir de la versión móvil