如何在ember js中使用belongs_to获取用户对象?

时间:2013-04-14 07:27:28

标签: ruby-on-rails ember.js

我有两个模型RecipeUser。我无法在配方中获取用户对象。我做错了什么?

App.Recipe.find(1).get('title') // Returns "recipe01 title". All works fine.

App.Recipe.find(1).get('user') // Returns null

user.js.coffee

App.User = DS.Model.extend
   email: DS.attr('string')
   recipes: DS.hasMany('App.Recipe')

recipe.js.coffee

App.Recipe = DS.Model.extend
  user: DS.belongsTo('App.User')
  title: DS.attr('string')

我的json数组

{
  recipe: {
    id: 1,
    title: "recipe01",
    user: {
      id: 1,
      name: "ejiqpep",
      email: "ejiqpep@gmail.com",
    }
  }
}

1 个答案:

答案 0 :(得分:3)

默认情况下,Ember Data希望通过键引用相关记录。然后你可以加载额外的记录,或者让Ember懒惰地从他们的API端点加载它们。

{
  recipe: {
    id: 1,
    title: "recipe01",
    user_id: 1
  },
  user: {
    id: 1,
    name: "ejiqpep",
    email: "ejiqpep@gmail.com"
  }
}

但是,您也可以指示适配器嵌入记录。

有两种类型的嵌入式记录加载embedded: 'always',其中Ember将接收和发送嵌入对象的任何更改。

App.Adapter.map 'App.Recipe',
  user: 
    embedded: 'always'

embedded:'load' Ember将从JSON加载嵌入对象,但会将更改作为单独的对象保存回API。

App.Adapter.map 'App.Recipe',
  user:
    embedded: 'load'

您想要采取的三个选项中的哪一个取决于您。 嵌入式对象最近才实现,并且围绕它们存在一些问题(请参阅Github上的Ember-Data问题),但无需对现有服务器进行任何更改即可使用。