我正在尝试获取具有以下路由的单例资源:/api/users/:user_id/profile
。用户模型对配置文件一无所知。模型在Rails中定义如下:
class UserProfile < ActiveRecord::Base
belongs_to :user
end
如何定义EmberJS模型和路线,以便在我转到/users/1/profile
时获取用户的个人资料?我一直试图找出如何在EmberJS中定义单例资源但找不到合适的东西。
答案 0 :(得分:1)
我认为您需要一个适配器,例如:
<强>适配器/用户profile.js 强>
import ActiveModelAdapter from 'active-model-adapter';
export default ActiveModelAdapter.extend({
namespace: 'api/users',
pathForType() {
return 'user_profile';
},
urlForFindRecord(id, modelName) {
return this.urlForFindAll(modelName);
},
urlForUpdateRecord(id, modelName) {
return this.urlForFindAll(modelName);
}
});
答案 1 :(得分:1)
“用户对个人资料一无所知”,您是否认为/api/users/:user_id
的API响应中不包含对/api/users/:user_id/profile
的任何引用?如果是这样,你总是可以告诉 Ember。
假设JSON-API:
// serializer:user
normalize(type, hash, prop) {
const result = this._super(type, hash ,prop);
const userId = result.data.id;
result.relationships.userProfile = {
links: { related: `/api/users/${userId}/profile` }
};
return result;
}
或者,如果您使用的是较旧的Ember-Data:
// serializer:user
normalizeRelationships(type, hash) {
hash.links = hash.links || {};
hash.links.userProfile = `/api/users/${userId}/profile`;
return this._super(type, hash);
}
然后,model:user
可以有userProfile
关系:
// model:user
userProfile: DS.belongsTo('userProfile', { async: true })