0

在我的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"

但仍然没有骰子。

4

0 回答 0