Rails 2.3RC1がリリースされた
きてます。
一応2/1付なのかな。
現時点では以下のコマンドで入れることができる。
$ gem install rails --source http://gems.rubyonrails.org
問題がなければたぶんこのままリリースになるんでしょう。
よくまとまっているリリースノート。
主な変更点に関する記事。
- Riding Rails: Rails 2.3.0 RC1: Templates, Engines, Rack, Metal, much more!
- Ryan’s Scraps: Rails 2.3 Released – Summary of Features
変更点はたくさんあるのだけれど、個人的に面白そうだなーと思ったものだけいくつかピックアップしてみる。
動的なScopedメソッドの追加
find_by_xxxと同じノリでscoped_by_xxxとかscoped_by_xxx_and_yyyとか使えるようになった。
scoped_by_xxx(:hoge).scoped_by_yyy(:hage)とかつなげることも出来てなにやらスマート。
というかscopedってメソッドがあったんですな。
デフォルトのScopeが定義できるようになった
モデルのコード内でdefault_scopeを使ってデフォルトの:orderや:limitを定義できるようになった。
普通にfindしたときとかデフォルトの条件が常に適用される。
これは微妙に便利だ。
ただし:conditionsは使えない。(一応使えるけど明らかにサポートされてない動作になる。副作用バリバリ)
Application Templates
DSLで書かれたテンプレートを使ってアプリケーションの初期構築をカスタマイズする仕組みができた。
Railsアプリを作るときいつも必ずする操作の自動化などができる。(public/index.htmlを消す、バージョン管理システムにインポートする、などなど)
以下のようにrailsコマンドに-mオプションでテンプレートファイルを指定すると、その内容を反映してRailsアプリケーションが作られる。
$ rails myproject -m /home/akahige/template.rb
rakeとかscript/generateを使ったりconfig/environment.rbやroutes.rbの内容を変更するなどの仕組みが提供されている。
その他シェルコマンドを叩けるのでいろいろできる。
参考:has_many :bugs, :through => :rails: Rails templates
Metal
MVCを使わずにレスポンスを返すMetalという仕組みを使えるようになった。
高速なレスポンスを返すことが出来る。
JSONやXMLなどテンプレート不要なデータを返したりするときに使える。
参考:ヽ( ・∀・)ノくまくまー(2008-12-16) [Rails] Metal
app/controllers以下の application.rb が application_controller.rb にリネームされた
リネームしないとRails 2.3ではエラーになる。
rake rails:updateで自動的にリネームされる。
うっかりバージョン管理システムへの反映忘れたりとか注意。
これは別に面白いとか思わなかったけどひっかかる人たくさんいそうだなぁと思って。
その他のトピック
個人的にピンと来ないけど一押しっぽいもの。
Nested Attributes, Nested Object Form
1対多の関連で多側のオブジェクトを一度にたくさんつくったり一度に操作するのが簡単になった。
HTTP Digest認証のサポート
ダイジェスト認証の仕組みがビルトインされた。
renderがシンプルに使えるようになった
renderの:actionとか:templateとかの指定がなくても引数を見て良きに計らってくれるようになった。
リリースノートのサンプルがわかりやすい。
Object.try
tryを使うとレシーバがnilでもNoMethodErrorが出ないでnilが返る。
nilかどうか分からないオブジェクトに対して、いちいちnilかどうかチェックして・・・みたいな手間が減らせると言うことなのかな。