首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用has_many实现Mongoid7.0单表继承

用has_many实现Mongoid7.0单表继承
EN

Stack Overflow用户
提问于 2020-08-18 03:04:00
回答 2查看 68关注 0票数 0

我的成绩是A级

代码语言:javascript
复制
class A
    include Mongoid::Document
    has_many :bs
    accepts_nested_attributes_for :bs

和一个B级

代码语言:javascript
复制
class B
    include Mongoid::Document
    belongs_to :a

和一个从B继承的类C

代码语言:javascript
复制
class C < B
field :new_field, type: String

这在Mongoid6上运行得很好。在Mongoid7中,在一个带有fields_for的表单上,提交后,我现在得到:

代码语言:javascript
复制
Attempted to set a value for 'new_field' which is not allowed on the model B

注意,这不是7.0 (我相信) b/c中支持的mongoid多态性,它不是在谈论单表继承(STI),而是支持属于同一个类/表的多个表作为相同的符号。不是这样的。我也尝试过使用as和多态:true。

有什么办法解决这个问题吗?

谢谢,凯文

EN

回答 2

Stack Overflow用户

发布于 2020-08-19 02:31:50

转到Mongoid 7.0或Rails 5.2 (不确定哪个更改破坏了这一点)你必须在STI的表单中设置类型,我是通过一个隐藏字段完成的:

代码语言:javascript
复制
<%f.hidden_field :_type, value: "C"%>

这允许您设置仅用于后代的属性。

票数 0
EN

Stack Overflow用户

发布于 2021-08-04 13:53:01

我也遇到过类似的问题。我在一个项目中将mongoid从3.0升级到7.0,STI是在旧的应用程序中实现的。在父表中显式声明了_type,这导致了意外行为。我删除了它,项目就开始工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63457121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档