2010-02-14 3 views
0

У меня есть модель пользователя, которая действует_as_authentic для AuthLogic's управления паролями. AuthLogic добавляет атрибуты «password» и «password_confirmation» поверх атрибута «crypted_password», поддерживаемого db. Это довольно стандартный материал AuthLogic.Authlogic: невозможно установить атрибут пароля из класса

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

#user.rb 
def password_and_confirm=(value) 
    password = value 
    password_confirmation = value 
end 

Однако вызов этого метода делает не, кажется, на самом деле установить пароль:

user = User.new 
user.password = "test" 
user.password    # => "test" 
user.crypted_password  # => a big base64 string, as expected 

user = User.new 
user.password_and_confirm = "test" 
user.password    # => nil 
user.crypted_password  # => nil 

Я также попробовал другой маршрут:

def internal_password(value) 
    password = value 
end 

... и получил ту же проблему.

Почему я не могу установить атрибут пароля из метода внутри класса User?

ответ

1

Лучше попробовать это:

#user.rb 
def password_and_confirm=(value) 
    self.password = value 
    self.password_confirmation = value 
end 

В противном случае рубин пытается лечить методы (как это реализовано как таковой) как локальные переменные (это имеет приоритет во время операций присваивания).

+0

Это было ... спасибо! –