リア充爆発日記

You don't even know what ria-ju really is.

backbone.js+railsでsaveのときにSyncしてほしくない項目をなんとかする方法

paperclipで管理している画像パスを以下のように取得すると困ることになるかも。

  def show
    data = hoge.find(params[:id])
    respond_with data, methods: [:image]
  end

これで帰ってきたJSONのimageは"/saver_side_path/to/image"なのだけどもsave()を呼んだ時にサーバー側が期待するのはローカルのパスなわけで、このままsaveするとNo handlerがどうこう言われる。

どうしたかというと、saveをオーバーライドしてimageをunsetして対応した。

class MyApp.Models.Hoge extends Backbone.RelationalModel
  save: (attrs, options) ->
    this.unset("image")
    Backbone.Model.prototype.save.call(this, attrs, options)

MyApp.Models.Hoge.setup()

ただ、この方法はこういうケース以外だと、どこかで困ったことになるかもしれない。
今回のケースでは、どっちにしろimageの値がサーバサイドと乖離しているんだから問題ないべ、と思ってやったけど、本来だったらmethods: [:image]のメソッドをひとつ被せて名前を変えるべきなのかも。や、そうだろ。やっぱそうする。