Después de más de un año de desarrollo, Ruby on Rails 3 se lanzó oficialmente al público hace unas semanas. Más que una simple actualización iterativa, esta versión tan anticipada fue una importante refactorización del popular marco de Ruby. Sigue leyendo para aprender cinco de las características nuevas más impresionantes de Ruby Rails 3.
Una de mis nuevas características favoritas de Ruby on Rails 3 es la introducción de JavaScript no intrusivo (UJS) a todas sus funciones de ayuda de JavaScript. En versiones anteriores de Rails, JavaScript se generaba en línea con HTML, lo que causaba un código feo y algo frágil.
Como ejemplo, Rails te permite usar su link_to method
para generar un enlace de borrado para algún objeto.
<%= link_to "Delete this Post", @post, :confirm => "¿Realmente quieres eliminar esta publicación?",: Method =>: delete%>
El uso de este método en su vista generaría lo siguiente en Rails 2:
Borra esta publicación
Rails 3 generaría algo mucho más simple:
Borra esta publicación
Rails 3 reemplaza todo el JavaScript en línea con un par de atributos HTML5. Todos los controladores de eventos de JavaScript para manejar el cuadro de confirmación real y la eliminación se almacenan en un archivo de JavaScript central que se incluye con cada proyecto de rieles.
Una gran ventaja de este nuevo método es que los ayudantes de JavaScript son independientes del marco. En lugar de estar vinculado a la biblioteca de Prototype como lo estaba en Rails 2, ahora puede elegir el marco de JavaScript que desee (las aplicaciones de Rails vienen con Prototype de forma predeterminada, pero jQuery ahora tiene soporte oficial).
Otra nueva característica impresionante de Rails 3 es que la protección XSS ahora está habilitada de forma predeterminada. Rails 2 admitió la protección XSS mediante el uso del h
método.
<%= h @comment.text %>
los h
Este método escaparía de HTML y JavaScript para garantizar que no se ejecutara ningún código malicioso del lado del cliente. Este método funcionó muy bien, pero había un problema: tenías que recordar usar el h
Método en todos los lugares donde se muestra la entrada introducida por el usuario. Si olvidó un solo lugar, entonces fue vulnerable a un ataque XSS.
En Rails 3, todas las entradas se escapan de forma predeterminada, lo que elimina la carga del desarrollador de tener que recordar escapar en todos los lugares donde pueda haber un código malicioso. Para aquellos momentos en los que desea permitir que aparezcan datos sin escapar en su vista, puede usar el crudo
Método para decirle a Rails 3 que no escape los datos..
<%= raw @comment.text %>
Rails 3 incluye un nuevo motor de consultas que facilita recuperar los datos que desea y le brinda más flexibilidad en el código de su controlador. Estos cambios se muestran en varios lugares, pero el caso más común es recuperar datos en su controlador. En Rails 2, podría usar el método de búsqueda para recuperar los datos que estaba buscando, pasando argumentos para especificar condiciones, agrupación, límites y cualquier otra información de consulta. Por ejemplo:
@posts = Post.find (: all,: conditions => ["category IN (?)", categories],: limit => 10,: order => "created_on DESC")
encuentra las diez primeras publicaciones dentro de algunas categorías específicas ordenadas por el tiempo de creación.
En Rails 3, cada uno de los parámetros pasados tiene su propio método, que se puede encadenar para obtener los mismos resultados..
@posts = Post.where (["categoría EN (?)", categorías]). orden ("created_on DESC"). límite (10)
La consulta no se ejecuta realmente hasta que se necesitan los datos; por lo que estos métodos pueden incluso ser utilizados en múltiples declaraciones.
@posts = Post.where (["categoría IN (?)", categorías]) if (condition_a) @posts = @ posts.where (['Approved =?', true]) else @posts = @ posts.where ( ['aprobado =?', falso]) fin
Este es solo un ejemplo simple, pero debería proporcionarle una idea de algunas de las formas en que esta nueva sintaxis puede ser más útil..
El módulo ActionMailer se ha reescrito para que sea mucho más fácil para su aplicación enviar correos electrónicos en Rails 3. Hay algunos cambios, pero aquí hay algunos de mis favoritos..
En Rails, un Mailer es una clase que puede tener muchos métodos, cada uno de los cuales generalmente configura y envía un correo electrónico. Anteriormente, tenía que configurar todos los parámetros para cada correo electrónico por separado en cada método.
clase UserMailer < ActionMailer::Base def welcome_email(user) from "[email protected]" # other paramters end def password_reset(user) from "[email protected]" # other parameters end end
En Rails 3, puede especificar valores predeterminados que pueden sobrescribirse opcionalmente en cada método.
clase UserMailer < ActionMailer::Base default :from => '[email protected]',: return_path => '[email protected]' def welcome_email (usuario) # no es necesario especificar desde el final del parámetro final
Las versiones anteriores de Rails requerían que enviase correos electrónicos utilizando métodos especiales que fueron creados dinámicamente por ActionMailer
. Por ejemplo, si desea enviar el correo electrónico de bienvenida en el ejemplo anterior, deberá llamar al:
UserMailer.deliver_welcome_email (@user)
En Rails 3, puedes llamar.
UserMailer.welcome_email (@user) .deliver
Esto tiene más sentido semánticamente, y además le permite recuperar y manipular el Correo
Objeto antes de entregar el correo electrónico..
Una de las fortalezas del marco de Ruby on Rails es la gran cantidad de gemas disponibles para el uso de los desarrolladores. Ya sea que se trate de autenticación, manejo de transacciones financieras, manejo de archivos subidos o casi cualquier otra cosa, existe la posibilidad de que una gema exista para ayudarlo con su problema..
Sin embargo, pueden surgir problemas si sus gemas requieren otras gemas, o los desarrolladores están en diferentes entornos, entre otras cosas. Para ayudar a resolver este tipo de situaciones, Rails 3 agrega la gema Bundler para ayudar a administrar sus dependencias. Usar Bundler en Rails 3 es extremadamente simple; agregue una línea para cada gema que necesite en su Gemfile, un archivo incluido en la raíz de cada una de sus aplicaciones.
gema 'authlogic'
Una vez que hayas incluido todas tus gemas, corre:
instalación de paquete
y Bundler descargará y configurará todas las gemas y sus dependencias que necesita para el proyecto.
Bundler también le permite especificar ciertas gemas que solo se configurarán en ciertos entornos (desarrollo vs producción vs pruebas).
Estos son solo algunos de los muchos cambios incluidos en Ruby on Rails 3. Muchas de las API antiguas aún funcionan en Rails, incluso si han quedado en desuso, para facilitar la actualización. Entonces, si estás en la valla sobre si actualizar o no tu aplicación de rieles existente, hazlo!
Gracias por leer!