2015-05-14 1 views
0

Я хочу, чтобы определить роль атрибута в моей пользователя модели, когда я установил врач атрибут, чтобы знать, что теперь, когда этот атрибут определен экземпляра Пользователя имеет роль из : врач (как это перечисление).Определить другой атрибут в инкубаторе

Это работает как роль определена, но роль ошибочно отнесены к другому типу перечисления, как показано в моем RSpec тест

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

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

RSpec:

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 

На самом деле я пытался повторите эту процедуру вручную в Rails console

user = User.new 
physician = Physician.new 

user.physician = physician 
user.physician? 
=> false 
user.role 
=> "assistant" 

Я подозреваю, что write_attribute не работает хорошо с Enums ...

P.D. Я также попытался с write_attribute (: роль,: врач) но он устанавливает значение роли всухую

ответ

0

Я думаю, что это фиксируется:

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

Но я не уверен, что это хорошая идея позвоните по номеру отправьте прямо сейчас

+0

Почему бы не просто «self.role =« assistant »? –

0

Нет необходимости использовать send, если только #role= - это частный метод. Просто позвоните по телефону self:

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

 Смежные вопросы

  • Нет связанных вопросов^_^