У меня есть следующая модель:
class User
include Mongoid::Document
include Mongoid::Timestamps
has_and_belongs_to_many :challenged, class_name: "Event", inverse_of: "challengers"
def challenge!(event)
self.challenged << event
self.save!
end
def unchallenge!(event)
self.challenged.where(_id: event.id).destroy_all
self.save!
end
end
class Event
include Mongoid::Document
include Mongoid::Timestamps
has_and_belongs_to_many :challengers, class_name: "User", inverse_of: "challenged"
end
Задача! метод работает отлично, но без проблем! один не делает.
Если я проверю это с помощью следующего кода:
require 'spec_helper'
describe User do
before(:each) do
@user = User.create!
@event = Event.create!
end
it "should unchallenge an event" do
@user.challenge!(@event)
@user.unchallenge!(@event)
@user.challenged.should_not include(@event)
end
end
Тест не пройден; так что похоже, что операция удаления не работает.
Журналы приложений:
MONGODB test_mongo_test['users'].insert([{"challenged_ids"=>[], "_id"=>BSON::ObjectId('4f2d13fdbd028603f7000001')}])
MONGODB test_mongo_test['system.namespaces'].find({})
MONGODB test_mongo_test['events'].insert([{"challenger_ids"=>[], "_id"=>BSON::ObjectId('4f2d13fdbd028603f7000002')}])
MONGODB test_mongo_test['events'].update({"_id"=>BSON::ObjectId('4f2d13fdbd028603f7000002')}, {"$addToSet"=>{"challenger_ids"=>{"$each"=>[BSON::ObjectId('4f2d13fdbd028603f7000001')]}}})
MONGODB test_mongo_test['users'].update({"_id"=>BSON::ObjectId('4f2d13fdbd028603f7000001')}, {"$pushAll"=>{"challenged_ids"=>[BSON::ObjectId('4f2d13fdbd028603f7000002')]}})
MONGODB test_mongo_test['$cmd'].find({"count"=>"events", "query"=>{"$and"=>[{:_id=>{"$in"=>[BSON::ObjectId('4f2d13fdbd028603f7000002')]}}, {:_id=>BSON::ObjectId('4f2d13fdbd028603f7000002')}]}, "fields"=>nil}).limit(-1)
MONGODB test_mongo_test['events'].remove({"$and"=>[{:_id=>{"$in"=>[BSON::ObjectId('4f2d13fdbd028603f7000002')]}}, {:_id=>BSON::ObjectId('4f2d13fdbd028603f7000002')}]})
MONGODB test_mongo_test['events'].find({:_id=>{"$in"=>[BSON::ObjectId('4f2d13fdbd028603f7000002')]}})
MONGODB test_mongo_test['events'].find({:_id=>{"$in"=>[BSON::ObjectId('4f2d13fdbd028603f7000002')]}})