在我的membership
模型上,我有以下枚举值:
enum relative_type: { member: 0, user: 1 }
然后在一些代码的其他地方,当涉及到membership
模型时,我有这个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
奇怪的是对于membership.user?
返回的属性,执行仍然在块false
内传递。if
这是一个pry
会话的示例。
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
所以从membership
上面的对象,你可以看到membership.relative_type
等于0
,对应于member
。所以这就像你所期望的那样工作,特别是在membership.member?
返回 true 的情况下。
我不明白的是....在这个当前实例中,为什么这个 PRY 实例是从if
块内执行的,只有在为真时才应该执行membership.user?
......但这里显然是错误的。
编辑 1
奇怪的是,我将方法编辑得更明确,如下所示:
if membership.user? == true
但它仍然将执行发送到if-block
即使membership.user?
是假的。
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
编辑 2
我什至更进一步,比较了枚举的实际值,如下所示:
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"
但仍然没有骰子。