January 24, 2009 – January 30, 2009
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::SimpleBackend#available_locales, which return an array of the translations that are available in the current Rails project.
Reconnecting MySQL Connections
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.
Easier Testing for JDBC
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).
HTTP Digest Authentication Support
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.
grouped_options_for_select Helper Method
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...")
<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>