The following code worked fine for me (mongoid 2.3.x):
class User
include Mongoid::Document
field :name, type: String
has_and_belongs_to_many :following, class_name: 'User', inverse_of: :followers, autosave: true
has_and_belongs_to_many :followers, class_name: 'User', inverse_of: :following
def follow!(user)
if self.id != user.id && !self.following.include?(user)
self.following << user
end
end
def unfollow!(user)
self.following.delete(user)
end
end
No inverse_class_name, no saving calls, no special handling, but self-service exception.
, mongoid dependent: nullify, . autosave: true ( , ). , mongoid ( 2.0.0.x).
if- , (else raise FooException).
.delete(user) , mongoid: http://mongoid.org/docs/relations/referenced/n-n.html ( "DEPENDENT BEHAVIOR" ).