オライリーの Head First Rails を読みながら Rails の勉強してるわけですが、やってる環境が Rails 3 なんでちょっと違ったりする部分があったりします。(この本は Rails 2.3 に対応とのこと)

まあそんなに違わなかったので結構サクサク進んでたのですが、今回はちょっとつまったのでメモ書きしておきます。

Rails 3 らしいやりかたということではないと思います。あくまで本を進めるために、 2.3 のやり方をできるだけそのまま 3 でやるにはどうしたらいいんだろう、ということでやってます。

つまったのはP.287の remote_form_for です。このタグを使えば簡単にAjax処理が組み込まれるとのことですが、Rails 3 ではそもそも remote_form_for タグが無いようで動きません。どうするか。

まず、jquery-railsをインストールします。

次にAjax処理させたいフォームのタグを

<%= form_for(seat, :remote => true, :html => {"data-update" => "seats", "data-type" => "html"}) do |f| %>

と変更します。

最後に、JavaScriptを書きます。僕はshow.html.erbにそのまま書きました。

$(function() {
    $("form[data-update]").live("ajax:success", function(data,status,xhr) {
        var link = $(this);
        $("#" + link.attr("data-update")).html(status);
    });
});

これでちゃんと本の通り座席部分が非同期で更新されるはずです。