I'm very annoyed with mogoid and embedded documents. I can't find the proper way to create, edit, or destroy them. I've tried all methods i've found around the web, but none of them seems to work.
I've also tried many tests on the rails console, but, still no result... All the test that i've done, stays unpersistent in the DB.
Here is the main class :
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
A boxer object should look like something like this :
{
"_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")
}
]
}
And finally, here is my 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
Actually, I've got no problem for index and show methods, but all CRUD operations fail, there is no persistence of my queries.
Thanks in advance for your replies.
It has been awhile since I ran into an issue that sounds very similar. I am wondering if the objects are not getting marked as dirty/changed. They way I always got around this was.