在setter中定义另一个属性

时间:2015-05-14 01:30:20

标签: ruby-on-rails ruby ruby-on-rails-4 enums rspec-rails

当我设置医生属性时,我想在用户模型中定义角色属性,知道现在这个属性是定义用户实例具有:physician 角色(因为它是枚举)。

工作,因为角色已定义,但角色被错误地分配给另一个枚举类型,如我的RSpec测试所示

SUCCEED()

RSpec的:

enum role: [:assistant, :physician, :patient]

def physician=(value)
    write_attribute(:role, "physician")
    super(value)
end

实际上我试图在Rails控制台中手动复制它

User is a physician should only be a physician
     Failure/Error: expect(user.role).to eq('physician')

       expected: "physician"
            got: "assistant"

       (compared using ==)
     # ./spec/models/user_spec

我怀疑 write_attribute 与Enums不能很好地协同工作......

Pd积。我还尝试使用 write_attribute(:role,:physician),但它将角色值设置为nil

2 个答案:

答案 0 :(得分:0)

我认为它已修复:

def physician=(value)
    self.send("role=", "physician")
    super(value)
end

但我不确定是否最好直接调用发送

答案 1 :(得分:0)

除非send是私有方法,否则无需使用#role=。只需直接在self上调用访问者:

def physician=(value)
  self.role = 'physician'
  super(value)
end