使用Ember对接Rails JSON:API时遇Missing Resource Type错误求助
问题原因及解决办法
这个错误的核心是Ember Data 识别的资源类型和后端返回的资源类型不匹配:
- 后端通过
jsonapi-resources返回的资源类型是复数形式的events - Ember默认会根据模型类名
EventModel推断资源类型为单数形式的event,两者不匹配导致找不到对应schema
两种可行的解决方式:
方式1:修改Ember模型,显式指定资源类型
在event.js中添加静态属性,强制指定后端返回的资源类型:
// app/models/event.js import Model, { attr } from '@ember-data/model'; export default class EventModel extends Model { static modelName = 'events'; @attr('string') note; @attr('string') scheduled_on; }
方式2:修改Rails后端的资源类型
如果不想改动Ember代码,调整jsonapi-resources的资源定义,将资源类型改为单数event:
# app/resources/event_resource.rb class EventResource < JSONAPI::Resource self.type = 'event' attributes :note, :scheduled_on # 此处保留原有的关联定义等代码 end
补充说明
Ember Data 默认的资源类型推断逻辑是:模型类名移除Model后缀后,转为小写单数(如EventModel对应event);而jsonapi-resources默认使用资源类名的复数形式(EventResource对应events)。这是两者默认规则的冲突点,只要统一两边的资源类型字符串即可解决问题。
内容的提问来源于stack exchange,提问作者Colibri
相关产品推荐
相关产品推荐

