1

Mogoid を初めて使用します (Rails-API 4 をサポートする現在のベータ版)。これを使用して、ユーザー フォームをドキュメントが埋め込まれた 1 つのドキュメントとして保持します。コントローラーの update メソッドでは、返されたカードに 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

ある種の永続性エラーだと思いますが、根本的な原因を見つけることができません...

3日間私を悩ませるのを手伝ってくれる人がいたら嬉しいです

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 に答える