On my membership
model, I have the following enum value:
enum relative_type: { member: 0, user: 1 }
Then elsewhere in some code, when it comes upon a membership
model, I have this if-branch
if membership.user?
member = Member.create(first_name: self.first_name, last_name: self.last_name, email: self.email, bio: self.bio, gender: self.gender, avatar: self.avatar, birthday: self.birthday, deceased: false)
membership.update!(member: member, invited: nil, relative_type: 0)
binding.pry
membership.inviter_connection.update!(request_status: 3)
end
The weird thing is for attributes where membership.user?
returns false
, execution still gets passed inside the if
block.
Here is an example of the a pry
session.
207: if membership.user?
208: member = Member.create(first_name: self.first_name, last_name: self.last_name, email: self.email, bio: self.bio, gender: self.gender, avatar: self.avatar, birthday: self.birthday, deceased: false)
209: membership.update!(member: member, invited: nil, relative_type: 0)
=> 210: binding.pry
211: membership.inviter_connection.update!(request_status: 3)
212: end
213: end
214: else
215:
[1] pry(#<User>)> membership.user?
=> false
[2] pry(#<User>)> membership
=> #<Membership id: 11045, family_tree_id: 76631, user_id: 31643, created_at: "2016-02-06 08:16:54", updated_at: "2016-02-06 08:18:08", relation: "brother", member_id: 9872, invited_id: nil, relative_type: 0>
[3] pry(#<User>)> membership.relative_type
=> "member"
[4] pry(#<User>)> membership.member?
=> true
So from the membership
object above, you can see that the membership.relative_type
is equal to 0
, which corresponds to member
. So that works like you would expect, particularly given that membership.member?
returns true.
What I don't understand is....in this current instance, why on earth is this instance of PRY being executed from within the if
block that should only be executed if membership.user?
is true....yet is clearly false here.
Edit 1
The weird thing is that I edited the method to be more explicit, like so:
if membership.user? == true
But it still sends the execution into the if-block
even when membership.user?
is false.
207: if membership.user? == true
208: member = Member.create(first_name: self.first_name, last_name: self.last_name, email: self.email, bio: self.bio, gender: self.gender, avatar: self.avatar, birthday: self.birthday, deceased: false)
209: membership.update!(member: member, invited: nil, relative_type: 0)
=> 210: binding.pry
211: membership.inviter_connection.update!(request_status: 3)
212: end
213: end
214: else
215:
[1] pry(#<User>)> membership.user?
=> false
[2] pry(#<User>)> membership.user?
=> false
[3] pry(#<User>)> membership.member?
=> true
Edit 2
I even took it a step further and compared the actual values of the enum, like so:
207: if membership.relative_type == 'user'
208: member = Member.create(first_name: self.first_name, last_name: self.last_name, email: self.email, bio: self.bio, gender: self.gender, avatar: self.avatar, birthday: self.birthday, deceased: false)
209: membership.update!(member: member, invited: nil, relative_type: 0)
=> 210: binding.pry
211: membership.inviter_connection.update!(request_status: 3)
212: end
213: end
214: else
215:
[1] pry(#<User>)> membership
=> #<Membership id: 11049, family_tree_id: 76639, user_id: 31647, created_at: "2016-02-06 08:41:59", updated_at: "2016-02-06 08:42:02", relation: "brother", member_id: 9874, invited_id: nil, relative_type: 0>
[2] pry(#<User>)> membership.relative_type
=> "member"
But still no dice.