Невозможно получить ответ JSON от бэкэнда RoR с использованием EmberJS и Ember-data
Я знаю, что это немного сложный вопрос. Дело в том, что я успешно соединил две модели со сложными отношениями (используя объединение таблиц между ними и т. Д.) Между моим бэкэндом Ruby on Rails и Ember/Ember-Data посредством ответа JSON.
Знаете, проблема в том, что я не могу подключить третью модель. Его идентификаторы встроены в другую модель, работающую нормально. Дело даже в том, что я действительно получаю рабочий 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.rb и person_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. Заранее большое спасибо за ваши ответы.