今更ながらRails1.2の変更点とか翻訳してみた
04 Feb 2007Rails1.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からの互換性がうんぬん、何か言いたい事あったら遠慮せずに言ってこい、とか書いてあるっぽい。