今更ながらRails1.2の変更点とか翻訳してみた

04 Feb 2007
133

Rails1.2も出たことだし、変更点とかちゃんと読んどこうと思ってざっくり訳してみた。やっぱ
り:format&respond_toとscaffold_resourcesでRESTFull化が目玉っぽい、あとマルチバイト対応が日本人的には嬉しいかも。

原文: Riding Rails: Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations

REST and Resources

RESTはRails1.2の目玉です、RESTに関しては私(DHH)のRailsConfキーノートを見てください。REST化はRailsのために重要な物です。あなたのアプリケーションをよりRESTfullにするための方法を考え始めてください。

REST化への移行を手伝うために、私達はCRUDなインターフェイスを作るためのscaffold generatorを提供します。

script/generate scaffold_resource

を試してみてください。

(追記:試してみた

フォーマットとrespond_to

Rails1.1時代からあるrespond_toに私達は少し手を加えました、それは魔法の:format! 全ての新しいアプリケーションはさらに一つデフォルトルートが加えられるでしょう。

map.connect ':controller/:action/:id.:format'

このルートを元に、以下の例を想像してみてください。

class WeblogController < ActionController::Base
  def index
    @posts = Post.find :all
    respond_to do |format|
      format.html
      format.xml { render :xml => @posts.to_xml }
      format.rss { render :action => "feed.rxml" }
    end
  end
end

GET /weblog     # returns HTML from browser Accept header
GET /weblog.xml # returns the XML
GET /weblog.rss # returns the RSS

この動作を実現するのに、今後Acceptヘッダーを使う必要はありません!:formatはより簡単に実現します。あなたはブラウザに".xml"を付けるだけで、あなたのAPIを探検することができます。ちょっと".rss"を付けてみてください、自動でページとアクションのキャッシングを行います(訳:本当?)

もちろんこの:formatはscaffold_resourceと抜群の相性で、自動でこれらをやってのけます。resource-scaffold generatorを行なうと自動で /posts/5.xml というアクセスまで作り上げるでしょう。素晴らしい!

Multibyte

オーイ!Unicodeちゃん! Railsがunicodeを保存->表示する間、UTF-8の文字列に対しtruncate,reverse,length等を行なうのはちょっと面倒でした。あなた自身でKCODEを記述していましたが、それは簡単ではありませんでした。

Unicode文字列の動作ためにRails1.2はActiveSupport::Multibyteを導入します。文字列でcharsメソッドを呼ぶとbyte単位ではなく良い感じに動き始めます。

'€2.99'という文字列を想像してください、私達がbyte単位で操作することは叶わぬ夢です。

'€2.99'[0,1] # => "\342" 
'€2.99'[0,2] # => "?" 
'€2.99'[0,3] # => "EUR"

このようにEUR文字列は3バイトです。あなたがバイト単位で操作するのは簡単ではないでしょう、しかしString#firstとTextHelper#truncateは簡単にそれを行なうことができる!

'€2.99'.first        # => '€'
truncate('€2.99', 2) # => '€2'

String#firstとTextHelper#truncateは自動で.charsメソッドを呼びます。もしあなた自身が操作したい時やlengthを使用したい時などは.charsメソッドを自分で呼んで下さい。例えば以下のように

You've written <%= @post.body.chars.length %> characters.

Rails1.2はあなたがunicodeを使いたいと想定しています、よってデフォルトchasetはUTF-8です、KCODEも自動的にUTF-8へセットされます。
(違うchasetをセットすることも可能です、例えば ActionController::Base.default_charset=(encoding) のように)

とても感謝します Manfred Stienstra, Julian Tarkhanov, Thijs van der Vossen, Jan Behrens, and (others?)

Routes

ActionPackの新しい実装はRoutesをより安全で高速にします、しかしそれは少し厳しくもあります。セミコロンとカンマはセパレーターです、例えば

map.connect '/download/:file'

という記述は、/download/history.txtにはもうマッチしません(動きません)。以下のような記述を使用してください

map.connect '/download/:file',
            :requirements => { :file => /.*/ }

(訳:あってる?微妙)

Auto-loading

Rubyの標準ライブラリへの参照にあったバグをフィックスしました。私達は自動でpathname.rbを読み込みます、これ以上require 'pathname'と手動で記述を行なう必要ありません。

また私達はモジュールの扱いも改善しました、例えばAccounting::Subscriptionという参照は、app/models/accounting/subscription.rb を参照することになります。しかしもしapp/models/subscription.rbというパスで参照したい場合、config/environment.rbのconfig.load_pathsへ

app/models/accounting

という記述を追加してください。

Prototype.js

To better comply with the HTML spec, Prototype’s Ajax-based forms no longer serialize disabled form elements. Update your code if you rely on disabled field submission.(よく判らん、Ajaxのときhiddenフィールドを送信しなくなったので、コードを修正しろ。ってこと?)

一貫性のために、Prototype.jsのElement・Fieldメソッドは引数を受け取らなくなりました。もしElement.toggleやElement.show等を使用していた場合、あなたはコード修正を行なう必要があります。

もしあなたがこのようなコードを書いていたとすれば

Element.show('page', 'sidebar', 'content');

このように修正する必要があります

['page', 'sidebar', 'content'].each(Element.show);

Action Mailer

全てのemailはMIMEバージョン1.0がデフォルトになりました。あなたはメール用のユニットテストを書き直す必要があります。

@expected.mime_version = '1.0'

Deprecation

Rails1.0からの互換性がうんぬん、何か言いたい事あったら遠慮せずに言ってこい、とか書いてあるっぽい。

コメント
blog comments powered by Disqus