0

次の2つのモデルがあります。

class Customer
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_many :locks, class_name: "Lock"
  accepts_nested_attributes_for :locks, allow_destroy: true

  field :name, type: String


  validates :name,
    presence: true

  belongs_to :list
end

class Lock
  include Mongoid::Document
  include Mongoid::Timestamps

  field :locked_by, type: Moped::BSON::ObjectId

  embedded_in :customer, inverse_of: :locks, class_name: "Customer"

  def unlock!
    self.destroy
  end
end

したがって、ロックを削除しようとすると、ロックは子コレクションから削除されますが、顧客のリロード後もまだそこにあります:

locks = customer.locks.where({ some conditions})

locks.each do |l|
  l.unlock!
end

customer.save

where 条件は間違いなく正しいオブジェクトを返します。

誰かが私を助けて、私が間違っていたことを教えてもらえますか?

アップデート:

これもうまくいかない

customer.locks = []
customer.save
customer.reload
4

1 に答える 1

0

さて、試してみましょう。

まず、このブロックを削除します

 def unlock!
    self.destroy
 end

次に、交換します

locks = customer.locks.where({ some conditions})
locks.each do |l|
      l.unlock!
    end

 customer.locks.where({ some conditions}).delete_all

それでもうまくいかない場合は、上記の行の後にこの行をもう 1 行追加してください

customer.locks.save
于 2013-08-25T13:18:07.560 に答える