読者です 読者をやめる 読者になる 読者になる

おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Rails勉強会@東京第38回に参加した(その2)

rails event

Rails勉強会@東京第38回に参加した(その1)に続いてその2です。

後半セッションはrails2.3.0をほげるセッションに参加しました。基本的にはRails2.3.0のリリースノートに沿って、Rails2.3.0に何が追加されたかを確認する流れでした。なので以下のメモはほとんどリリースノートうぇぶたまに載ってる内容なので、詳細が気になった方はそちらを参照してください。

Rack

  • CGiからRackを通すように変更になった
  • coufig.ruでRackの設定ができる
  • SomeController.call(env)ができる(irbでコントローラのテストができるかも)
  • edgeではリリースされていないはずのrack1.0使っている。そのおかげでRuby1.9.1動く。そのおかげでRails2.3.1ではRuby1.9動くのでは。

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/