Rails3+Backboneでハマるポイント
Rails 3では,CSRFを防止するためにPOSTリクエストに専用のトークンを要求する仕組みがあります.
このトークンチェックを必須にした場合,Backbone.jsでのsyncやsaveなどで送るデータでもこのトークンをパラメタとして渡す必要があるため,saveなどで毎回authenticity_token: token
を書かなければいけません.
もし書き忘れると「なぜかPOSTリクエストがうまく送れない」という事態になります.僕はこれによくハマりました…
対応
そこでsyncやsaveが内部的に使っているBackbone.syncを書き換え,tokenを必ず渡すようにします.
実際に書き換えるのはBackbonel.Model.toJSONです.JSONを作るときにtokenを差し込むようにします.
var token = $('meta[name="csrf-token"]').attr('content');
Backbone.Model.prototype.toJSON = function() {
return _(_.clone(this.attributes)).extend({
authenticity_token: token
});
};
あんまり綺麗なやり方じゃないですが,不要にはまるのを避けられます:D