Rails 3.2 で link_to :remote => true を使ってフォームに入力された値を取得する

Rails3 系では link_to_remote は link_to :remote => true に変更されています。

<%= link_to 'Ajax 風リンク', hoge_url, :remote => true %>

この時 link_to_remote では使えた :with や :submit といった、現在フォームタグに入力された値を get で渡す手段が Rails3 系では動作しなくなっていたので、これに対応しようと思います。

まずは、リンクタグに data-submit 属性を追加します。

<%= link_to 'Ajax 風リンク', hoge_url, :remote => true, 'data-submit' => '$(#hoge_id)' %>

次に CoffeeScript を使って、設定した data-submit 属性が渡されるように記述します。

jQuery ->
  $("a[data-remote=true]").each (index, tag) =>
    a = $(tag)
    a.click ->
      href = a.attr('href').replace(/\?.+/, "")
      a.attr('href', href + '?hoge_id=' + eval(a.attr('data-submit').val())

これで、対象リンクのクリック時に data-submit に指定した値が読み込まれるようになりました。自分で '?hoge_id=' と書いている点や複数の値を渡す場合への対応ができていないのが気になりますが、とりあえず動作したので今回はここまで。