Rails 3.0 と Internet Explorer

2010/11/19

連載「Ruby on Rails 3.0日記」を読んでくださった方からメールをいただきました。

第1回から手順通り作業を進めたところ、第9回でつまづいたそうです。

実装後に、「完了」リンクをクリックすると、

Routing Error
No route matches "/tasks/1/finish"

のようなエラーが出る。ただし、Firefox では大丈夫で、Internet Explorer でしか問題が起きない、ということでした。

この症状が起こる直接の原因はすぐに分かります。

link_to '完了', [ :finish, task ], :method => :put

と書いたにもかかわらず、tasks/1/finish へのアクセスが PUT ではなく GET で行われてしまっている、ということです。

しかし、どう対処すればいいのか、すぐには分かりませんでした。

結論から言うと、https://github.com/rails/prototype-ujs/raw/master/src/rails.js をダウンロードして、public/javascripts/rails.js を入れ替えれば、問題は解消します。

この rails.js は、Rails 3.0 で登場した重要な JavaScript コードなのですが、つい最近の 2010/11/13 に更新されています。コミットメッセージには「fix `data-method` with IE」と書いてありますので、多分、ちょうど私たちが今直面しているこの問題をまさに解決したものと思われます。

[追記] 2010/11/15 に Rails 3.0.3 がリリースされましたが、上記の変更は取り込まれていません。まだ、rails.js の入れ替えは必要です。(2010/11/20)