Ember.js找到没有ID的单个项目

时间:2014-10-05 00:52:55

标签: ruby-on-rails ember.js ember-data ember-simple-auth

我正在构建一个Ember.js应用程序,使用Ember数据,ActiveModel序列化程序和Ember Simple Auth Devise,连接到Rails API并试图了解如何构建加载单个资源的路由,在这种情况下对于我的帐户"当前用户的页面。

从Rails的角度来看,我不需要ID,但在Ember方面,我不知道如何实现这一目标。我的解决方法是提供占位符ID,Rails忽略。有没有更好的方法来实现这一目标?

Ember.js:

MyAccountRoute = Ember.Route.extend(model: -> @store.find 'account', '1')

滑轨:

def show
  @item = @current_user.account
end

4 个答案:

答案 0 :(得分:4)

当您使用find

时,Ember Data具有非常具体的实现 使用该类型调用的

find只需要该类型的集合,这将映射到findAll

使用类型和基本类型(非对象)调用的

find将期望该类型的单个对象响应,这将映射到findById

使用类型和对象调用

find将期望一个集合(可能通过发送的参数过滤服务器端),这映射到findByQuery

因此,使用Ember Data无法执行此操作,除非您想将其破解为其他实现之一,或使用ajax回调然后再加载商店。我更喜欢使用你正在使用的模式,我做this.store.find('user', 'me');然后忽略参数。

答案 1 :(得分:0)

我解决这个问题的方法是返回一个只包含一条记录的数组/记录集合。

然后在Ember中,您可以使用.get('firstObject')这样的

来访问此单个结果
export default Ember.Route.extend({
  model: function() {
    return this.store.find('user').then(function (users) {
      return users.get('firstObject');
   });
 }
});

这更像是一种Ember的做事方式,也避免了您在使用Ember开发者工具插件时可能会注意到的问题;返回的数据实际上会创建一个重复的记录 - 最终会得到一个id为me1的空记录,以及一条记录,其中包含返回的单个记录的ID。

另一种方法是继续使用me1并设置或修改要匹配的返回记录的ID。在这种情况下,您将返回单个对象而不是数组/集合。

答案 2 :(得分:0)

Ember数据有queryRecord方法。

  

此方法请求一条记录,其中id未事先知道

http://emberjs.com/api/data/classes/DS.Store.html#method_queryRecord

答案 3 :(得分:0)

我将两个答案结合起来,并将queryRecord与服务器忽略的参数一起使用。

return this.store.queryRecord('user_settings', {id: 'me'});

感谢Binarytales和antulik

相关问题