ruby-on-rails-3 – Backbone.js在一个宁静的模型上使用非静止的动作

我有一个常规的休息模式,我得到,创建,删除和更新.最重要的是,我想在该模型上调用特殊操作,如change_password.

常规的RESTful路由是传统的Rails 3路由:

fetch   => GET    /api/models/:id
save    => PUT    /api/models/:id
create  => POST   /api/models
destroy => DELETE /api/models/:id

但是,除此之外,我还有特殊的操作:

changePassword => GET /api/models/:id/change_password
activate       => GET /api/models/:id/activate

等等.

我需要在模型上设置什么,所以它识别这些新的动作,以及如何将调用包装到模型方法中?

解决方法

将新方法添加到模型中相当简单 – 只需在.extend()中指定新方法即可.您必须自己编写一些这些内容,但您可以利用现有的机器,例如Backbone.sync(大多只是围绕$.ajax()的包装)和Model的现有url属性:
var MyModel = Backbone.Model.extend({

    activate: function(opts) {
        var model = this,url = model.url() + '/activate',// note that these are just $.ajax() options
            options = {
                url: url,type: 'POST' // see my note below
            };

        // add any additional options,e.g. a "success" callback or data
        _.extend(options,opts);

        return (this.sync || Backbone.sync).call(this,null,this,options);
    },// etc

});

就像一个注释一样,从REST的角度来看,你的changePassword和activate操作不应该是GET方法 – 所有GET方法都应该是幂等的.这不仅仅是RESTifarianism,这是一个好主意 – 你可以最终缓存这些URL(所以没有任何反应)或多次碰到他们(通常需要POST请求的用户确认).如果可以,进行这些POST调用.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...