L-exp Mobile

A few tiny never/rarely seen before rails 2.0 features

Asset Caching

I had talked about this before in the past. Basically, rails allows you to merge your css and javascript files in a single file which is cachable by the browsers. Hence, there’ll only be just one request ( which would return 304 response from 2nd time onwards ) per page, which would result in faster loading time for your visitors.

I tend to put these lines in my layouts :

1 2 <%= javascript_include_tag :all, :cache => true %> <%= stylesheet_link_tag :all, :cache => true %>
Migrations now accept command line attributes

So let’s say to add a string called “name” to my users table, now I’d just do :

script/generate migration AddNameToUser name:string

And to remove a column called “useless” from users table :

script/generate migration RemoveUselessFromUser useless:string

Please note that, when you generate a migration to remove columns, attribute type may seem trivial. But it is used to generate down migration, which would re-create those columns.

Better Exception Handling

In addition to what Ryan said, you can have inline exception handlers as well.

1 2 3 rescue_from ActiveRecord::RecordNotFound do render :file => '/bad_record', :status => 404 end

Block can even take have an argument for exception object.

1 2 3 rescue_from ActiveRecord::RecordInvalid do |exception| render :action => (exception.record.new_record? ? 'new' : 'edit') end

The above snippet would greatly DRY up your controllers if you use save! and create! in your RESTful application.

Request Profiler

Rails now includes request profiler which uses ruby-prof and generates fancy pants graphs for you. You’ll need to supply an input file to use with request profiler, which would be in your usual integration test format. A sample input file for an application using restful_authentication plugin can look somewhat like :

1 2 lifo:freeonrails pratik$ cat perfscript post('/sessions', { :login => 'quentin', :password => 'test' })

And then roll it like :

lifo:freeonrails pratik$ script/performance/request perfscript
And the one liners render partial collection now works with a collection of hash.
<%= render :partial => 'foo', :collection => [{ :name => 'world', :address => 'bar' }, { :name => 'food', :address => 'world' }] %>
ActiveRecord::Base#becomes to change record’s type
render :partial => @pet.becomes(Cat) # renders cats/cat instead of pets/pet
link_to(:back) for “Back” button using request.env[“HTTP_REFERER”] or ‘javascript:history.back()’ ( fallback ) Range extensions: #include?(range), #overlaps?, and #step without a block error_messages_for accepts objects so that you can display error for local variable
<%= error_messages_for 'user', :object => @question.user %>
Array#rand
1 2 3 [].rand # => nil ['a'].rand # => 'a' [1,2,3].rand # => 1 or 2 or 3
Hash#to_query
{ :user => {:name => "lifo"} }.to_query => "user%5Bname%5D=lifo"

This post is for covering smaller fixes/features which are not very easy to spot. For very exciting and rather major Rails 2.0 features, I’d recommend you check out :

Offizial release post Ryan’s Scraps Fabio’s Screencast chuyeow’s blog

Options:   Save This | Share
Viewed 1 times
Published 3 months ago
By pratik
From Resource has_many :bugs, :through => :rails - sleepless in london.. in lists:
Best Ruby on Rails Blogs

Menu

by Genís