I am trying to have two relationships to the same model. A user has many invitations (an invitation belongs to a user, multiple people could have invited the same user). But an invitation can also be referred by a user (a user has many referrals).
ruby require "spec_helper" class Invitation include Mongoid::Document field :email, type: String belongs_to :user belongs_to :referred_by, class_name: "User" after_create :create_user def to_s "#{id} (#{email}) / #{user.id} (#{user.email}) / #{user.invitations.count}" end private def create_user user = User.create!({email: email}) user.invitations << self end end class User include Mongoid::Document field :email, type: String has_many :invitations, :inverse_of => :user has_many :referred_invitations, class_name: "Invitation", :inverse_of => :referred_by end describe "User/Invitations" do it "property retrieves user.invitations" do jane_invitation = Invitation.create!({ email: "jane@example.com" }) john_invitation = Invitation.create!({ email: "john@example.com", referred_by: jane_invitation.user }) jane_invitation.user.invitations.count.should == 1 jane_invitation.user.invitations.should eq [ jane_invitation ] end end
The last eq should only produce on relationship via invitations. This spec succeeds if I don't assign referred_by to john_invitation.