The biggest change in Rails in recent memory isn’t reflected in edge Rails yet: I’m speaking, of course, about the merger of Merb into Rails 3 . There is a 3-0-unstable branch in the repository, but it hasn’t yet started to diverge from the main line of development. I’ll continue to focus on the master branch, which will be released as Rails 2.3, for the time being.
And Rails 2.3 is still cooking along. The team managed 39 commits this week, despite people taking holiday time off. Many of those were minor bug fixes, but here are a few things you might want to track in the new development.
ActionController::Base#render
is a lot smarter about deciding what to render. You can just throw things at it and expect to get the right results. If you’re using Rails 2.2, you often need to supply explicit information to render:
render :file => '/tmp/random_file.erb'
render :template => 'other_controller/action'
render :action => 'show'
Now in Rails 2.3, you can just supply what you want to render:
render '/tmp/random_file.erb'
render 'other_controller/action'
render 'show'
render :show
Rails chooses between file, template, and action depending on whether there is a leading slash, an embedded slash, or no slash at all in what’s to be rendered. Note that you can also use a symbol instead of a string when rendering an action. Other rendering styles (:inline, :text, :update, :nothing, :json, :xml, :js
) still require an explicit option.
A couple of fixes to ActiveRecord get rid of failing cases for associations. One handles quoting table names in some has_many :through
associations – if the table name contains a SQL keyword, then you can’t use it in such an association in Rails 2.2. commit
The other fix allows you to once again use a hash in conditions for a has_many
relationship:
has_many :orders, :conditions => {:status => 'confirmed'}
That worked in Rails 2.1, fails in Rails 2.2, and will now work again in Rails 2.3 (if you’re dealing with this issue in Rails 2.2, you can use a string rather than a hash to specify conditions). commit
Some side effects of calling Model#last
(it would change the order for other finders within the same scope) have been removed. commit
With this patch, you can supply custom prompts for the various date select helpers (date_select
, time_select
, and datetime_select
), the same way you can with collection select helpers. You can supply a prompt string or a hash of individual prompt strings for the various components. You can also just set :prompt
to true
to use the custom generic prompt:
select_datetime(DateTime.now, :prompt => true)
select_datetime(DateTime.now, :prompt => "Choose date and time")
select_datetime(DateTime.now, :prompt =>
{:day => 'Choose day', :month => 'Choose month',
:year => 'Choose year', :hour => 'Choose hour',
:minute => 'Choose minute'})
The dbconsole script now lets you use an all-numeric password without crashing. commit
You can now use symbols for the :type
option of send_file
and send_data
, like this: send_file("fabulous.png", :type => :png)
. commit
If you’re using Active Support delegates, the new :allow_nil
option lets you return nil instead of raising an exception when the target object is nil. commit
You can now specify a particular timestamp for updated_at
timestamps: cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago)
commit