1

mogoid と埋め込みドキュメントに非常に悩まされています。それらを作成、編集、または破棄する適切な方法が見つかりません。Web で見つけたすべての方法を試しましたが、どれもうまくいかないようです。

Railsコンソールでも多くのテストを試しましたが、まだ結果はありません...私が行ったすべてのテストは、DBに永続的ではありません。

メインクラスは次のとおりです。

class Boxer
  include Mongoid::Document
  include Mongoid::Paperclip

  store_in collection: "Boxers"

  field :NumeroLof
  field :Couleur
  field :DateNaissance
  .... many fields ...
  field :Contacts
  field :PublicationEtalon

  has_mongoid_attached_file :Image
  validates_attachment_content_type :Image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]

  embeds_many :Certificats, as: :Certificat
  accepts_nested_attributes_for :Certificats, allow_destroy: true
end

ボクサー オブジェクトは次のようになります。

{
"_id" : ObjectId("584676a482ed3c1bc77484b3"),
"NumeroLof" : 1316Ae024,
"Name" : "SHEBA",
"Affixe" : "DU JABELIN",
"DateNaissance" : ISODate("2001-05-24T00:00:00.000Z"),
"Sexe" : "F",
"Couleur" : "B",
"Identification" : "2AXZ279",
"Certificats" : [ 
    {
        "Exposition" : "EYRAGUES NE",
        "Date" : ISODate("2011-06-26T00:00:00.000Z"),
        "Juge" : "P. Asensi",
        "Observation" : "",
        "Denomination" : "M-VET",
        "_id" : ObjectId("58467f1082ed3c1bc77557b3")
    }, 
    {
        "Exposition" : "PRADINES RE",
        "Date" : ISODate("2011-08-14T00:00:00.000Z"),
        "Juge" : "R. Pras",
        "Observation" : "",
        "Denomination" : "M-VET",
        "_id" : ObjectId("58467f1082ed3c1bc77557bd")
    }
]

}

そして最後に、これが私の CertificatsController です:

class CertificatsController < ApplicationController
      before_action :load_boxer
      before_action :load_certificat, only: [:show, :edit, :update, :destroy]

      # GET /boxer/:id/certificates/
      def index
        @certificats = @boxer.Certificats
      end

      # GET /boxer/:id/certificates/:id/
      def show
      end

      # GET /boxer/:id/certificates/new
      def new
        @certificat = @boxer.Certificat.new
      end

      # POST /boxer/:id/certificates/
      def create
        @certificat = Certificat.build(certificat_params)
        if @certificat.save
          @boxer.Certificats.new(@certificat)
          @boxer.reload
          redirect_to boxer_certificats_path(@boxer), notice: "Nouveau certificat créé avec succès" and return
        end
        render 'new'
      end

      def edit
      end

      def update
        if @certificat.update_attributes(certificat_params)
          @boxer.reload
          redirect_to boxer_certificats_path(@boxer), notice: "le certificat a été mis à jour!" and return
        end

        render 'edit'
      end

      def destroy
        @certificat.destroy
        @boxer.reload
        redirect_to boxer_certificats_path, notice: "le certificat a été supprimé!" and return
      end

      private
      def certificat_params
        params.require(:certificat).permit(:Denomination, :Date, :Exposition, :Juge,
        :Observation)
      end

      def load_boxer
        @boxer = Boxer.find(params[:boxer_id])
      rescue Mongoid::Errors::DocumentNotFound
        not_found
      end

      def load_certificat
        @certificat = @boxer.Certificats.find(params[:id])
      end

    end

実際には、index メソッドと show メソッドには問題はありませんが、すべての CRUD 操作が失敗し、クエリの永続性がありません。

返信ありがとうございます。

4

2 に答える 2

0

非常によく似た問題に遭遇してからしばらく経ちました。オブジェクトがダーティ/変更済みとしてマークされていないかどうか疑問に思っています。彼らは私がいつもこれを回避した方法でした。

class Boxer
  embeds_many :Certificats, as: :Certificat
end

b = Boxer.new
b.certificats_will_change!
b.certificats = Certifcat.new
b.save!
于 2016-12-27T17:49:56.913 に答える