Dopo oltre un anno di sviluppo, Ruby on Rails 3 è stato ufficialmente rilasciato al pubblico poche settimane fa. Più che un semplice aggiornamento iterativo, questo rilascio molto atteso è stato un importante refactoring del famoso framework Ruby. Continua a leggere per scoprire cinque delle più straordinarie nuove funzionalità di Ruby Rails 3.
Una delle mie nuove funzionalità preferite di Ruby on Rails 3 è l'introduzione di Unobtrusive JavaScript (UJS) per tutte le sue funzioni di supporto JavaScript. Nelle versioni precedenti di Rails, JavaScript è stato generato in linea con HTML, causando un codice brutto e un po 'fragile.
Ad esempio, Rails ti permette di usare il suo metodo link_to
per generare un link di cancellazione per qualche oggetto.
<%= link_to "Delete this Post", @post, :confirm => "Vuoi veramente cancellare questo post?",: Method =>: delete%>
L'utilizzo di questo metodo nella visualizzazione genererebbe quanto segue in Rails 2:
Elimina questo post
Rails 3 genererebbe qualcosa di molto più semplice:
Elimina questo post
Rails 3 sostituisce tutto il codice JavaScript inline con un paio di attributi HTML5. Tutti i gestori di eventi JavaScript per gestire la casella di conferma effettiva e la cancellazione sono memorizzati in un file JavaScript centrale incluso in ogni progetto di rotaie.
Un grande vantaggio di questo nuovo metodo è che gli helper JavaScript sono indipendenti dal framework. Invece di essere legato alla libreria di Prototype come se fossi in Rails 2, ora puoi scegliere qualsiasi framework JavaScript che ti piace (le app di Rails vengono fornite con Prototype di default, ma jQuery è ora ufficialmente supportato.
Un'altra straordinaria nuova funzionalità di Rails 3 è che la protezione XSS è ora abilitata di default. Rails 2 ha supportato la protezione XSS tramite l'uso di h
metodo.
<%= h @comment.text %>
Il h
il metodo dovrebbe sfuggire a html e JavaScript per garantire che non sia stato eseguito alcun codice dannoso sul lato client. Questo metodo funzionava alla grande, ma c'era un problema: dovevi effettivamente ricordare di usare il h
metodo ovunque è stato visualizzato l'input inserito dall'utente. Se hai dimenticato anche solo un posto, allora sei vulnerabile a un attacco XSS.
In Rails 3, tutti gli input sono sfuggiti per impostazione predefinita, sottraendo allo sviluppatore il compito di dover ricordare di sfuggire ovunque che il codice dannoso possa essere presente. Per le volte in cui desideri consentire ai dati senza escape di apparire nella tua vista, puoi utilizzare il comando crudo
metodo per dire a Rails 3 di non sfuggire ai dati.
<%= raw @comment.text %>
Rails 3 include un nuovo e interessante motore di query che semplifica il recupero dei dati desiderati e offre maggiore flessibilità nel codice del controller. Queste modifiche vengono visualizzate in vari punti, ma il caso più comune è il recupero dei dati nel controller. In Rails 2, è possibile utilizzare il metodo find per recuperare i dati che si cercavano, passando argomenti per specificare condizioni, raggruppamento, limiti e qualsiasi altra informazione di query. Per esempio:
@posts = Post.find (: all,: condizioni => ["categoria IN (?)", categorie],: limit => 10,: order => "created_on DESC")
trova i primi dieci post all'interno di alcune categorie specificate ordinate dal tempo di creazione.
In Rails 3, ciascuno dei parametri passati ha il proprio metodo, che può essere concatenato per ottenere gli stessi risultati.
@posts = Post.where (["categoria IN (?)", categorie]). ordine ("created_on DESC"). limit (10)
La query non viene effettivamente eseguita finché i dati non sono necessari; quindi questi metodi possono essere utilizzati anche su più istruzioni.
@posts = Post.where (["categoria IN (?)", categorie]) if (condition_a) @posts = @ posts.where (['approved =?', true]) else @posts = @ posts.where ( ['approved =?', false]) end
Questo è solo un semplice esempio, ma dovrebbe fornire un'idea di alcuni dei modi in cui questa nuova sintassi può essere più utile.
Il modulo ActionMailer è stato riscritto per rendere molto più facile per l'applicazione inviare e-mail in Rails 3. Ci sono alcune modifiche, ma qui ci sono un paio dei miei preferiti.
In Rails, un Mailer è una classe che può avere molti metodi, ognuno dei quali generalmente configura e invia una email. In precedenza, dovevi impostare tutti i parametri per ogni e-mail separatamente in ciascun metodo.
classe UserMailer < ActionMailer::Base def welcome_email(user) from "[email protected]" # other paramters end def password_reset(user) from "[email protected]" # other parameters end end
In Rails 3, è possibile specificare valori predefiniti che possono essere facoltativamente sovrascritti in ciascun metodo.
classe UserMailer < ActionMailer::Base default :from => '[email protected]',: return_path => '[email protected]' def welcome_email (utente) # non è necessario specificare dal parametro end end
Le versioni precedenti di Rails richiedevano l'invio di e-mail utilizzando metodi speciali creati dinamicamente da ActionMailer
. Ad esempio, se si desidera fornire l'e-mail di benvenuto nell'esempio precedente, è necessario chiamare:
UserMailer.deliver_welcome_email (@user)
In Rails 3, puoi semplicemente chiamare
UserMailer.welcome_email (@user) .deliver
Questo ha più senso semanticamente, e inoltre ti permette di recuperare e manipolare il posta
oggetto prima di consegnare l'e-mail.
Uno dei punti di forza del framework Ruby on Rails è la pletora di gemme disponibili per gli sviluppatori. Che si tratti di autenticazione, gestione di transazioni finanziarie, gestione di caricamenti di file o di qualsiasi altra cosa, è probabile che esista una gemma per aiutare con il tuo problema.
Possono sorgere problemi, tuttavia, se le gemme richiedono altre gemme o gli sviluppatori si trovano in ambienti diversi, tra le altre cose. Per aiutare a risolvere questi tipi di situazioni, Rails 3 aggiunge la gemma di Bundler per aiutare a gestire le dipendenze. L'utilizzo di Bundler in Rails 3 è estremamente semplice; aggiungi una linea per ogni gemma richiesta nel tuo Gemfile, un file incluso nella radice di ciascuna delle tue applicazioni.
gemma 'authlogic'
Una volta incluse tutte le tue gemme, esegui:
installazione bundle
e Bundler scaricherà e configurerà tutte le gemme e le loro dipendenze necessarie per il progetto.
Bundler consente inoltre di specificare alcune gemme per essere configurate solo in determinati ambienti (sviluppo vs produzione vs test).
Queste sono solo alcune delle molte modifiche incluse in Ruby on Rails 3. Molte delle vecchie API funzionano ancora in Rails, anche se sono state deprecate, per facilitare l'aggiornamento. Quindi, se sei fuori di testa se aggiornare o meno l'app dei tuoi binari esistenti, allora vai a prenderlo!
Grazie per aver letto!