2016-04-03 11 views
1

Ich benutze Beziehung (has_many , belongs_to) Tha arbeitet mit Quellcode oben hier, aber ich bekomme error document Not Found zum Löschen Foto (Bild), wenn Beziehungen (embeds_many, embedded_in) ändern. Jeder Helpme bitte, wie Embed_many relations verwenden mongoid mit &, was falsch ist mein Quellcode hier:wie zu löschen und zu zerstören eingebettete Dokumente in Mongoid mit Schienen 4

class Room 
    include Mongoid::Document 

    field :home_type, type: String 
    field :room_type, type: String 
    embeds_many :photos 
end 

class Photo 
    include Mongoid::Document 
    include Mongoid::Paperclip 


    embedded_in :room 


end 

class PhotosController < ApplicationController 
    def destroy 
     @photo = Photo.find(params[:id]) 
     room = @photo.room 

     @photo.destroy 
     @photos = Photo.where(room_id: room.id) 
     respond_to :js 
    end 
end 

Antwort

1

Die einfache Antwort ist, dass, wenn Sie einbetten ein Dokument, das Sie das Dokument in einer anderen hinzufügen. Damit mongodb das eingebettete Dokument finden kann, muss es zuerst das übergeordnete Dokument finden. In Ihrer vorherigen Iteration haben Sie mit has_many zwei Dokumente aus unterschiedlichen Sammlungen zugeordnet, mit denen Sie nach dem zugehörigen Dokument suchen können.

Daher haben eingebettete Dokumente zwar eine _id, können aber nur im Dokument gesucht werden. Wenn Sie @photo ausgeben würden, würden Sie sehen, dass es null ist. Ich bin überrascht, dass Ihre zweite Zeile room = @ photo.room keinen Fehler zurückgibt keine Methode für nil: NilClass.

tun, was Sie wollen, müssen Sie zuerst das Dokument finden, die Sie ohne zu viel Veränderung tun konnte:

class PhotosController < ApplicationController 
    def destroy 
     room = Room.find_by('photo._id': BSON::ObjectId(params[:id])) 
     @photo = room.photos.find(params[:id]) 

     @photo.destroy 
     @photos = room.photos 
     respond_to :js 
    end 
end 
Verwandte Themen