我第一次使用Mogoid(当前测试版支持Rails-API 4)。我用它来保存用户表单作为一个带有嵌入文档的文档。在控制器的更新方法中,如果返回的卡没有id
,我会使用此构造来创建新卡params[:form_cards].andand.each do |card|
card['form_card_fields'].andand.each do |field|
if !field['id'].blank?
@formField=@formCard.form_card_fields.find(field['id'])
else
@formField=@formCard.form_card_fields.create!
end
end
if @form.save
render json: @form, status: :created, location: @form
else
render json: @form.errors, status: :unprocessable_entity
end
大多数情况下都适用。不幸的是,有时会发生错误并且我创建的嵌入式文档没有持久性ID,每当我读到它时,结果都是不同的。使用后
示例返回的ID(每个ID来自同一字段的不同读取操作)
536615c94d6163d0010a0000
536615d64d6163d0010b0000
536615dd4d6163d0010c0000
536615e84d6163d0010d0000
536616014d6163d0010e0000
我的模型看起来像这样:
class Form
include Mongoid::Document
include Mongoid::Timestamps
embeds_many :form_cards
end
class FormCard
include Mongoid::Document
include Mongoid::Timestamps
embeds_many :form_card_fields
embedded_in :form
end
class FormCardField
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :form_card
end
我认为这是某种持久性错误,但我无法找到根本原因...
如果有人能帮助我,我会很高兴这会让我三天烦恼
答案 0 :(得分:1)
在cascade_callbacks: true
或embeds_many
之后添加embeds_one
,因此模型应如下所示
class Form
...
embeds_many :form_cards, cascade_callbacks: true
...
end
class FormCard
...
embeds_many :form_card_fields, cascade_callbacks: true
...
end
cascade_callbacks
允许运行嵌入式文档的回调...以便父级持久保存它的嵌入式文档。