Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当前用户的Ember.js路由';s/设置页面_Ruby On Rails_Ember.js_Ember Cli_Active Model Serializers_Rails Api - Fatal编程技术网

Ruby on rails 当前用户的Ember.js路由';s/设置页面

Ruby on rails 当前用户的Ember.js路由';s/设置页面,ruby-on-rails,ember.js,ember-cli,active-model-serializers,rails-api,Ruby On Rails,Ember.js,Ember Cli,Active Model Serializers,Rails Api,用户设置页面的一种常见模式是,它可以在/settings上运行 在我的Rails应用程序中,我通过将get'settings'映射到settings#show并查找当前用户的设置来实现这一点 但在余烬的一面,我被难住了。没有用于GET请求的ID,因此我无法在路由中使用this.store.find('setting',params.ID)的典型模式 处理此类用例的“余烬方式”是什么?这里已经讨论过: 加载一条不基于ID的记录的问题是,您需要返回一个DS.Model对象作为承诺。如果您得到一条已

用户设置页面的一种常见模式是,它可以在
/settings
上运行

在我的Rails应用程序中,我通过将
get'settings'
映射到
settings#show
并查找
当前用户的设置来实现这一点

但在余烬的一面,我被难住了。没有用于
GET
请求的ID,因此我无法在路由中使用
this.store.find('setting',params.ID)
的典型模式


处理此类用例的“余烬方式”是什么?

这里已经讨论过:


加载一条不基于ID的记录的问题是,您需要返回一个DS.Model对象作为承诺。如果您得到一条已经在客户机内存中的记录,那么现在将有两个不同的对象表示同一条记录(类型和id组合)。举个例子:

var user123 = App.User.find(123);
var currentUser = App.findByUrl('/users/current'); //This is an imaginary method, i.e. Ember Data don't support it
notEqual(user123, currentUser, "The user objects can't be the same cause we don't know what the current user is yet");
现在,我们从服务器获得以下响应:

{
    "user": {
        "id": 123,
        "name": "Mufasa"
    }
}
现在currentUser和user123都有id 123,但它们本质上是不同的对象=非常糟糕。这就是为什么这种方法不起作用

相反,您需要加载一个用户记录数组,监听它的加载,然后从加载的记录中获取第一个对象。像这样:

var users = App.User.find({ is_current: true });
users.one('didLoad', function() {
    App.set('currentUser', users.get('firstObject');
});


$.ajax({
    type: 'GET',
    url: '/users/current',
    success: function(payload) {
        var store = this.store;
        var userReference = store.load(App.User, payload.user);
        App.set('currentUser', store.recordForReference(userReference));
    }.bind(this)
});