2

我知道这是一个有点棘手的问题。问题是我通过 JSON 响应成功连接了我的 Ruby on Rails 后端和 Ember/Ember-Data 之间具有复杂关系的两个模型(使用它们之间的连接表等)。

知道,问题是我无法连接第三个模型。它的 id 嵌入在另一个工作正常的模型上。问题是我确实得到了一个带有数据的有效 JSON 响应,但我的 ember-data 模型由于某种原因在我的 ember 控制器上没有得到它们。

这是我想要得到的模型:

Profile.js

App.Adapter.map
(
  'App.Profile',
  {
    projects: {embedded: 'load'},
    people: {embedded: 'load'}
  }
);

App.Profile = DS.Model.extend
(
   {
      name: DS.attr('string'),
      tools: DS.attr('string'),
      number: DS.attr('number'),
      projects: DS.hasMany('App.Project', {embedded: 'load'}),
      people: DS.hasMany('App.Person', {embedded: 'load'})
   }
);

模型Person.js,其 JSON 响应是有效的返回:

App.Adapter.map
(
  'App.Person',
  {
    profiles: {embedded: 'load'},
    projectsCreated: {embedded: 'load'},
    projects: {embedded: 'load'},
    friends: {embedded: 'load'}
  }
);

App.Person = DS.Model.extend
(
   {
      name: DS.attr('string'),
      place: DS.attr('string'),
      email: DS.attr('string'),
      password: DS.attr('string'),
      academic: DS.attr('string'),
      professional: DS.attr('string'),
      profiles: DS.hasMany('App.Profile', {embedded: 'load'}),
      knowledge: DS.attr('string'),
      projectsCreated: DS.hasMany('App.Project', {embedded: 'load'}),
      projects: DS.hasMany('App.Project', {embedded: 'load'}),
      friends: DS.hasMany('App.Person', {embedded: 'load'}),
      iconUrl: DS.attr('string')
   }
);

用于每个序列化程序profile_serializer.rbperson_serializer.rb :

class ProfileSerializer < ActiveModel::Serializer
  attributes :id,
             :name,
             :tools,
             :number

  has_many :projects, ember: :id
  has_many :people, ember: :id           
end

class PersonSerializer < ActiveModel::Serializer
  attributes :id,
             :name,
             :place,
             :email,
             :password,
             :academic,
             :professional,
             :knowledge,
             :icon_url

  has_many :friends, embed: :id
  has_many :projects_created, embed: :id
  has_many :projects, embed: :id
  has_many :profiles, embed: :id
end       

最后,JSON 响应

GET http://localhost:3000/people 

{
    "people": [
        {
            "id": 1,
            "name": "Daniel",
            "place": "Ireland",
            "email": "daniel@example.com",
            "password": "123456",
            "academic": "Computing Engineer",
            "professional": "Fundecor",
            "knowledge": "html, css, javascript, jquery, ember",
            "icon_url": "http://imageshack.us/a/img196/6619/xckl.jpg",
            "friend_ids": [
                2,
                3
            ],
            "projects_created_ids": [
                1
            ],
            "project_ids": [],
            "profile_ids": [
                1,
                3,
                5
            ]
        },
        {
            "id": 2,
            ...
        },
        {
            "id": 3,
            ...
        }
    ]
}

下一步是查询这个profile_ids,其正确答案是:

GET http://localhost:3000/profiles?ids%5B%5D=1&ids%5B%5D=3&ids%5B%5D=5

{
    "profiles": [
        {
            "id": 1,
            "name": "Frontend",
            "tools": "html, css, javascript, jquery",
            "number": 0,
            "projects": [],
            "people": [
                {
                    "id": 1,
                    "name": "Daniel",
                    "place": "Ireland",
                    "email": "daniel@example.com",
                    "password": "123456",
                    "academic": "Computing Engineer",
                    "professional": "Fundecor",
                    "knowledge": "html, css, javascript, jquery, ember",
                    "icon_url": "http://imageshack.us/a/img196/6619/xckl.jpg",
                    "friend_ids": [
                        2,
                        3
                    ],
                    "projects_created_ids": [
                        1
                    ],
                    "project_ids": [],
                    "profile_ids": [
                        1,
                        3,
                        5
                    ]
                }
            ]
        },
        {
            "id": 2,
            "name": "Mobile Developer",
            ...
        },
        ...
    ]
}

返回所有配置文件条目。但问题是,当我尝试通过我的控制器或路由获取它时,浏览器控制台(firebug 或类似)上的结果是空的。人的每个领域都是正确的,包括profile_ids,但不是profile模型本身。

也许,如果您想拥有整个代码本身,可以在https://github.com/neil89/project-on上查看。非常感谢您的回答。

4

0 回答 0