This week we saw 35 commits in edge Rails – though many are bug fixes and minor things. Here’s one more preview of some of the recent and significant changes.
Rails can now provide localized views, depending on the locale that you have set. For example, suppose you have a Posts
controller with a show
action. By default, this will render app/views/posts/show.html.erb
. But if you set I18n.locale = :da
, it will render app/views/posts/show.da.html.erb
. If the localized template isn’t present, the undecorated version will be used. Rails also includes I18n#available_locales
and I18n::SimpleBackend#available_locales
, which return an array of the translations that are available in the current Rails project.
MySQL supports a reconnect flag in its connections – if set to true, then the client will try reconnecting to the server before giving up in case of a lost connection. You can now set reconnect = true
for your MySQL connections in database.yml
to get this behavior from a Rails application. The default is false
, so the behavior of existing applications doesn’t change.
To make life easier for anyone using Rails on JRuby, Active Record now includes test tasks for a bunch of database accessible via JDBC: Derby, H2, hsqldb, MySQL, PostgreSQL, and sqlite3 (the latter three are also available through non-JDBC connections, as you know). You need to have the database, the activerecord-jdbc-adapter gem installed, and the specific activerecord-jdbcdatabase-gem for the database you’re testing. Then you can run tests like this: jruby -S rake test_jdbcmysql
(with similar tests for the other adapters, of course).
This one first appeared a couple of weeks ago, but was reverted due to some problems with the initial implementation. Fortunately, the problems were resolved, and Rails 2.3 will ship with built-in support for HTTP digest authentication. Ryan Daigle published some sample code.
Action View already has a bunch of helpers to aid in generating select controls, but now there’s one more: grouped_options_for_select
. This one accepts an array or hash of strings, and converts them into a string of option
tags wrapped with optgroup
tags. For example:
grouped_options_for_select([["Hats",
["Baseball Cap","Cowboy Hat"]]],
"Cowboy Hat", "Choose a product...")
returns
<option value="">Choose a product...</option>
<optgroup label="Hats">
<option value="Baseball Cap">Baseball Cap</option>
<option selected="selected" value="Cowboy Hat">
Cowboy Hat
</option>
</optgroup>