Na meer dan een jaar van ontwikkeling, werd Ruby on Rails 3 een paar weken geleden officieel vrijgegeven voor het publiek. Meer dan alleen een iteratieve update, deze langverwachte release was een belangrijke refactoring van het populaire Ruby-framework. Blijf lezen om vijf van de meest geweldige nieuwe functies in Ruby Rails 3 te leren.
Een van mijn favoriete nieuwe Ruby on Rails 3-functies is de introductie van Unobtrusive JavaScript (UJS) voor al zijn JavaScript-helperfuncties. In vorige versies van Rails werd JavaScript inline gegenereerd met HTML, waardoor er lelijke en enigszins brosse code ontstond.
Rails stelt u bijvoorbeeld in staat om het te gebruiken link_to methode
om een verwijderlink voor een object te genereren.
<%= link_to "Delete this Post", @post, :confirm => "Wilt u dit bericht echt verwijderen?",: Method =>: delete%>
Het gebruik van deze methode zou volgens u het volgende kunnen genereren in Rails 2:
Verwijder deze post
Rails 3 zou iets veel eenvoudiger genereren:
Verwijder deze post
Rails 3 vervangt alle inline JavaScript door een paar HTML5-attributen. Alle JavaScript-gebeurtenishandlers om het daadwerkelijke bevestigingsvak en de verwijdering af te handelen, worden opgeslagen in één centraal JavaScript-bestand dat bij elk railsproject wordt geleverd.
Een groot voordeel van deze nieuwe methode is dat de JavaScript-helpers kaderagnostisch zijn. In plaats van gebonden te zijn aan de Prototype-bibliotheek zoals je was in Rails 2, kun je nu kiezen welk JavaScript-framework je wilt (Rails-apps worden standaard geleverd met Prototype, maar jQuery wordt nu officieel ondersteund.
Een andere geweldige nieuwe functie van Rails 3 is dat XSS-beveiliging nu standaard is ingeschakeld. Rails 2 ondersteunde XSS-beveiliging door het gebruik van de h
methode.
<%= h @comment.text %>
De h
methode zou ontsnappen aan html en JavaScript om ervoor te zorgen dat er geen kwaadwillende client-side code werd uitgevoerd. Deze methode werkte prima, maar er was één probleem: je moest je herinneren dat je het had moeten gebruiken h
methode overal waar de invoer werd ingevoerd. Als je zelfs maar één plaats bent vergeten, was je kwetsbaar voor een XSS-aanval.
In Rails 3 is alle invoer standaard ontlast, waardoor de ontwikkelaar zich ontlast van het feit dat hij moet onthouden om overal te ontsnappen dat er mogelijk schadelijke code aanwezig is. Voor die keren dat u wilt toestaan dat gegevens zonder escapecodes in uw weergave worden weergegeven, kunt u de rauw
methode om Rails 3 te vertellen om niet aan de gegevens te ontsnappen.
<%= raw @comment.text %>
Rails 3 bevat een coole nieuwe query-engine die het gemakkelijker maakt om de gewenste gegevens terug te krijgen en die u flexibeler maakt in uw controllercode. Deze wijzigingen verschijnen op verschillende plaatsen, maar het meest voorkomende geval is het ophalen van gegevens in uw controller. In Rails 2 zou u de find-methode kunnen gebruiken om de gegevens op te halen waarnaar u op zoek was, argumenten door te geven om voorwaarden, groepering, limieten en andere query-informatie op te geven. Bijvoorbeeld:
@posts = Post.find (: all,: conditions => ["category IN (?)", categorieën],: limit => 10,: order => "created_on DESC")
vindt de eerste tien berichten binnen bepaalde gespecificeerde categorieën gerangschikt naar de aanmaaktijd.
In Rails 3 heeft elk van de doorgegeven parameters een eigen methode, die aan elkaar kan worden geketend om dezelfde resultaten te krijgen.
@posts = Post.where (["categorie IN (?)", categorieën]). order ("created_on DESC"). limit (10)
De query wordt niet daadwerkelijk uitgevoerd totdat de gegevens nodig zijn; dus deze methoden kunnen zelfs worden gebruikt in meerdere statements.
@posts = Post.where (["categorie IN (?)", categorieën]) if (condition_a) @posts = @ posts.where (['approved =?', true]) else @posts = @ posts.where ( ['approved =?', false]) end
Dit is slechts een eenvoudig voorbeeld, maar zou u een idee moeten geven van enkele manieren waarop deze nieuwe syntaxis nuttiger kan zijn.
De ActionMailer-module is herschreven om het voor uw applicatie een stuk eenvoudiger te maken om e-mail te verzenden in Rails 3. Er zijn nogal wat veranderingen, maar hier zijn een paar van mijn favorieten.
In Rails is een Mailer een klasse die vele methoden kan hebben, die elk in het algemeen een e-mail configureren en verzenden. Voorheen moest u alle parameters voor elke e-mail afzonderlijk in elke methode instellen.
class 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 kunt u standaardinstellingen opgeven die optioneel in elke methode kunnen worden overschreven.
class UserMailer < ActionMailer::Base default :from => '[email protected]',: return_path => '[email protected]' def welcome_email (user) # niet nodig om te specificeren vanaf parameter end end
Voor vorige versies van Rails moest u e-mail verzenden met behulp van speciale methoden die dynamisch werden gemaakt door ActionMailer
. Als u bijvoorbeeld de welkomst-e-mail in het bovenstaande voorbeeld wilt leveren, moet u bellen met:
UserMailer.deliver_welcome_email (@user)
In Rails 3 kun je gewoon bellen
UserMailer.welcome_email (@user) .deliver
Dit is semantisch zinvoller, en bovendien kun je het ophalen en manipuleren Mail
object voordat de e-mail wordt bezorgd.
Een van de sterke punten van het Ruby on Rails-framework is de overvloed aan edelstenen die beschikbaar is voor gebruik door ontwikkelaars. Of het nu gaat om authenticatie, het afhandelen van financiële transacties, het verwerken van bestandsuploads of bijna alles anders, de kans bestaat dat er een juweeltje bestaat om u te helpen met uw probleem.
Er kunnen echter problemen optreden als uw edelstenen andere edelstenen vereisen, of ontwikkelaars zich onder andere in verschillende omgevingen bevinden. Om dit soort situaties te helpen oplossen, voegt Rails 3 de Bundler-edelsteen toe om u te helpen uw afhankelijkheden te beheren. Het gebruik van Bundler in Rails 3 is uiterst eenvoudig; voeg een regel toe voor elke edelsteen die je nodig hebt in je Gemfile, een bestand opgenomen in de root van elk van je applicaties.
gem 'authlogic'
Zodra je al je edelstenen hebt toegevoegd, voer je uit:
bundel installeren
en Bundler zal alle edelstenen en hun afhankelijkheden die u nodig hebt voor het project downloaden en configureren.
Met Bundler kunt u ook bepaalde edelstenen opgeven die alleen in bepaalde omgevingen kunnen worden geconfigureerd (ontwikkeling versus productie versus testen).
Dit zijn slechts enkele van de vele wijzigingen die zijn opgenomen in Ruby on Rails 3. Veel van de oude API's werken nog steeds in Rails, zelfs als ze verouderd zijn, om het bijwerken te vergemakkelijken. Dus, als je op het hek bent over het al dan niet upgraden van je bestaande rails-app, ga er dan voor!
Bedankt voor het lezen!