В моем приложении у меня была модель BlogPost
и модель User
, которые связаны соотношением по имени author
. Для того, чтобы служить данные из моего приложения Rails Я использую active_model_serializers
с определением:Как указать другое имя корня для внедренных объектов?
class Blog::PostSerializer < ActiveModel::Serializer
embed :ids, include: true
attributes :id, :title, :text, :created_at, :updated_at
has_one :author
has_many :assets
end
Когда я получать это, используя Ember модель:
Admin.BlogPost = DS.Model.extend({
author: DS.belongsTo('User'),
title: DS.attr('string'),
text: DS.attr('string'),
createdAt: DS.attr('date'),
updatedAt: DS.attr('date')
});
Существует ошибка:
Uncaught Error: Assertion Failed: You looked up the 'author' relationship on a 'blog.post' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.belongsTo({ async: true })`)
, которая вызывается что мой ответ выглядит следующим образом:
{
'blog_posts': [
{
id: 1,
author_id: 1
},
// …
],
'authors': [
{ id: 1, /* … */ }
]
}
Есть ли способ изменить 'authors'
в ответ на 'users'
или использовать 'authors'
как псевдоним 'users'
в сериализаторе?
Я знаю, но зачем делать дополнительные выписки, когда все может быть выбрано только одним. Я отправляю эти данные, но Ember не распознает их, поскольку использует другой ключ, чем ожидалось. – Hauleth
Вы смешиваете разные вопросы. Async не означает, что вы выбираете только один или нет. И в вашей полезной нагрузке «авторы» ** после ** 'blog_posts' выглядит хорошо. Но ** внутри ** 'blog_posts' вы используете' author_id' (не вставляете полный 'author'), поэтому вы должны установить {async: true}. – artych
Я проверил это, и это не то, что я имею в виду. 'async' означает, что он сделает подзапрос для каждого запрошенного элемента (когда и когда потребуется). Я хочу, чтобы Ember использовал данные, которые в настоящее время находятся в полезной нагрузке, чтобы получить информацию о 'User'. – Hauleth