2016-12-20 3 views
1

Меня очень раздражают могоидные и встроенные документы. Я не могу найти правильный способ создания, редактирования или уничтожения. Я пробовал все методы, которые я нашел в Интернете, но никто из них, похоже, не работает.Монгоид, постоянство на встроенных документах

Я также пробовал много тестов на консоли рельсов, но, по-прежнему нет результата ... Все те тесты, которые я сделал, остаются неустойчивыми в БД.

Вот главный класс:

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 

На самом деле, у меня нет проблем для методов индексирования и показа, но все операции CRUD терпят неудачу, и я не сохраняю своих запросов.

Заранее благодарим за ваши ответы.

ответ

0

Прошло некоторое время с тех пор, как я столкнулся с проблемой, которая звучит очень похоже. Мне интересно, если объекты не становятся помечены как грязные/измененные. Они так всегда обходили это.

class Boxer 
    embeds_many :Certificats, as: :Certificat 
end 

b = Boxer.new 
b.certificats_will_change! 
b.certificats = Certifcat.new 
b.save! 
0

Я нашел ошибку, которую сделал сам. Для тех, кто может задаться вопросом, вот в чем смысл: В классе Сертификата необходим embedded_in Boxer ...

Смежные вопросы