如何使用Rails删除和销毁Mongoid中的嵌入式文档4

时间:2016-04-03 17:59:38

标签: ruby-on-rails mongodb mongoid

我使用关系( has_many , belongs_to)我正在使用上面的源代码,但是当更改关系(error document Not Found)时,我得到embeds_many, embedded_in用于删除照片(图片)。请帮助,如何使用mongoid&amp ;; Embed_many relations我的源代码在这里出了什么问题:

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

1 个答案:

答案 0 :(得分:1)

这里的简单答案是,当您嵌入文档时,您将该文档添加到另一个文档中。为了让mongodb找到嵌入的文档,首先需要找到父文件。在上一次迭代中,您使用has_many关联来自不同集合的两个文档,使您可以通过关联文档进行查找。

因此,尽管嵌入式文档具有_id,但您只能从文档中查找它们。如果你要输出@photo,你会发现它是零。我很惊讶你的第二行房间= @ photo.room没有返回错误没有nil的方法:NilClass。

要做你想做的事,你首先需要找到你可以做的文件而不需要太多改变:

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