【问题标题】:Not persistent id in Embedded Document in Mongoid 4在 Mongoid 4 的嵌入式文档中不是持久的 id
【发布时间】:2014-05-04 11:18:21
【问题描述】:

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

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

如果谁能帮我把它烦死我三天,我会很高兴

【问题讨论】:

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


    【解决方案1】:

    embeds_manyembeds_one 之后添加cascade_callbacks: true,这样模型应该如下所示

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多