Rails勉強会@東京第38回に参加した(その1)に続いてその2です。
後半セッションはrails2.3.0をほげるセッションに参加しました。基本的にはRails2.3.0のリリースノートに沿って、Rails2.3.0に何が追加されたかを確認する流れでした。なので以下のメモはほとんどリリースノートやうぇぶたまに載ってる内容なので、詳細が気になった方はそちらを参照してください。
Rack
Nested Attributes
- Active Recordで入れ子になっているモデルの属性を直接更新することができる
- メソッド名が長い&ださい(accepts_nested_attributes_for)
Dynamic Scopes
named_scopeを使わずに、メソッドチェーン的にクエリを作る事が出来るようになった。
Article.scoped_by_published(true).scoped_by_user_id(1) #=> "SELECT * FROM articles WHERE published = 1 AND user_id = 1"
個人的にはnamed_scopeできちんと名前を付ける方が好みなので使わないかも。
Default Scopes
デフォルトの検索条件を指定できるようになった。これは使える機能だと思う。
default_scope :order => 'created_at DESC'
デフォルトの検索条件を使いたくない場合は
- 条件を上書き
- 下記のようにwith_exclusive_scopeメソッドのブロックの中で実行する
Article.with_exclusive_scope { find(:all) }
Dynamic Scopes
findで:havingが書けるようになった
Render
- Renderメソッドが賢くなった。:actionとか:templateとか書かなくても推測してくれる。
- renderにモデルオブジェクトをつけると自動的に:partialでオブジェクトを渡すようになった。便利。(viewのみで使える。controllerだとエラー)
Application Controller Renamed
Application Controllerの名前がapplication.rbからapplication_controllerに変更された。2.3にアップデートした際は、手動でリネームするか下記のrakeタスクを使う。
rake rails:update:application_controller
Routing
formatted_系のルーティングがデフォルトではなくなった。:formatオプションを使うとformatted_も使える。
RouteSet#add_configuration_file
で指定したファイルをルーティングに追加できるようになった。
Rackによるsessionの遅延ロード
いつもsession情報を読み込んでたのを、必要な時だけにした。
Localized Views
ビュー単位でLocalizationできるようになった。下記のように設定していたら、show.da.html.erbを優先して読む。
I18n.locale = :da
エラーメッセージのカスタマイズ
error_messages_forなどを使用したとき、「名前 がありません」のように属性とエラーメッセージの間に半角スペースがはいってしまっていたのが変更できるようになった。
#1294 Add word separator for AR error messages - Ruby on Rails - rails
また、I18nの機能で書ける
hoge, fuga and foo
の,やandも変更できるようになったらしい。
translateメソッドで読み込む設定の相対化
RAILS_ROOT/app/view/people/index.htmlの中では、translate(".foo")とtranslate("people.index.foo")が同じ意味になるようになった。
Prompts for Date Select Helpers
日付選択系メソッドに:promptオプションがついた。
grouped_options_for_select Helper Method
grouped_options_for_selectメソッドでoptgroupタグをつけたoptionタグを生成できるようになった。
try
普段ならこう書くところを
@person && @person.name
こう書けるようになった
@person.try(:name)
Rails Metal
ActionControllerとroutingの処理をスルーして超高速にアクセスできる機構。ルーティングはMetalが先っぽい。
Application Templates
railsプロジェクトを始めるときにいつもしている作業をDSLで書けるように。
rails -m template_file_path
を実行するとテンプレートファイルに書いたことを実行。下記のようなrakeコマンドもあるのであとで実行する事も出来る。
rake rails:template LOCATION=~/template.rb
これは便利かも。
user voice
下記でrailsに追加したい機能を募集してる。
http://rails.uservoice.com/