RailsでAjaxでの更新時にはrender_to_stringが便利


AjaxのPOST使ってcreateした場合、DOMの操作が面倒じゃないですか。
自分でDOM作って追加するのって。


なんかいい方法ないかなぁと調べてみたら
こちらで紹介されている、render_to_string を使えばpartialで切り出した分を
responseに返せます。
これは捗りますね。
フルAjaxで動くRailsアプリを作ってみたよ。 | Ginpen.com

使い方

view

ajax時に欲しい箇所をpartialで呼び出すように修正。

<%= render partial: 'shared/group', collection: @groups %>
controller
#一部省略
    if request.xhr?
        html = render_to_string partial: 'shared/group', collection: [@group]
        {html: html}
      return
    end
javascript

結果をappendするだけ。

  $('#add-group').click(function(){
    var succFunc = function(ajax){
      if (ajax.status === 'success') {
        $('.column').append(ajax.html);
        //TODO:focus
        $('.key-mapping table tbody').sortable('refresh');
      }
    };
    ajaxWithJSON('groups', '', succFunc);
  });

  function ajaxWithJSON (url, data, succFunc) {
    $.ajax({
      url: url,
      type: 'POST',
      dataType: 'json',
      data:  data,
      success: succFunc
    })
  }

ソース

rochefort/cheet_stock - GitHub
いろいろ整理してませんが、一旦置きました。