1

我第一次使用 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 示例(每个都来自同一字段的不同读取操作)

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

我想这是某种持久性错误,但我找不到根本原因......

如果谁能帮助我,我会很高兴,因为它困扰了我三天

4

1 回答 1

1

在左右cascade_callbacks: true之后添加模型应该如下所示embeds_manyembeds_one

class Form
  ...
  embeds_many :form_cards, cascade_callbacks: true
  ...
end

class FormCard
  ...
  embeds_many :form_card_fields, cascade_callbacks: true
  ...
end

允许运行嵌入式文档的cascade_callbacks回调......以便持久化父级持久化它的嵌入式文档。

于 2014-05-04T19:57:57.193 回答