如何解决Ember (Octane) 模型和 Mirage 中的多重多态关系
在我们的 Rails 后端,我们有很多 Concerns
服务器端。例如,几个模型导入一个 AppointableConcern
,它允许资源与 Appointments
相关联。每个模型可以导入无限数量的 Concerns
。
在我们的 Ember Octane 模型中,我们改用继承,我不确定这是否是个好主意。比如我们有这两个模型...
// models/groupable.js
import { belongsTo } from '@ember-data/model';
import ApplicationModel from './application'
export default ApplicationModel.extend({
group: belongsTo('group',{ inverse: 'groupables' }),});
// models/appointable.js
import { hasMany } from '@ember-data/model';
import Groupable from './groupable';
export default Groupable.extend({
appointments: hasMany('appointment')
});
... 以及一些扩展 Appointable
或 Groupable
的模型。
对我来说,似乎继承被滥用以在不密切相关的类之间共享逻辑:Appointable
不是 Groupable
的特定实现(多个 Groupables
可以形成一个Group
)。
现在我想知道:
- 这是在模型之间共享此逻辑的推荐/标准方式吗?
- 有没有更灵活的选择?考虑到我上面的例子,在任何应该可分组的模型中直接使用
group: belongsTo('group',{ inverse: 'groupables' })
,在应该允许约会关联的所有模型中直接使用appointments: hasMany('appointment')
似乎是一个简单的解决方案。
编辑:
我们在上面概述的解决方案中遇到了问题。它与 EmberCLI Mirage 测试有关:我想再制作一个模型 groupable
,但它不太适合继承链。我们无法使其继承自 Groupable
模型。所以我们直接在新模型中添加了这一行:group: belongsTo('group',{ inverse: 'groupables' })
这在浏览器中有效,但在 Mirage 中出现此错误:
The 'article' type does not implement 'groupable' and thus cannot be assigned to the 'groupables' relationship in 'group'. Make it a descendant of 'groupable' or use a mixin of the same name.
但是由于没有多重继承,我不能让 Article
成为 Groupable
的后代,并且 Mirage 中根本没有混合。所以我从我的新模型中删除了 { inverse: 'groupables' }
,这暂时没问题,但我们不应该仅仅为了进行测试而从代码中删除功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。