在Mongoid 4中的嵌入式文档中不是持久性ID

时间:2014-05-04 11:18:21

标签: ruby-on-rails ruby-on-rails-4 mongoid mongoid4

我第一次使用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

我认为这是某种持久性错误,但我无法找到根本原因...

如果有人能帮助我,我会很高兴这会让我三天烦恼

1 个答案:

答案 0 :(得分:1)

cascade_callbacks: trueembeds_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允许运行嵌入式文档的回调...以便父级持久保存它的嵌入式文档。