Почему для виртуального атрибута установлено значение null? - PullRequest
0 голосов
/ 19 сентября 2011

Я работаю над системой ruby ​​on rails.

У меня есть форма ruby ​​on rails, которая имеет виртуальный атрибут - пароль.Действие в ответ на отправку формы обновляет объект модели и сохраняет его.Перед сохранением before_save: callback вызывает метод encrypt_password.Однако я не думаю, что виртуальный атрибут получает значение из формы.Это потому, что когда я пытаюсь войти в систему, происходит многократный сбой. Код:

 attr_accessor :password
 attr_accessible :Name, :password, :UserName, :RegistrationName, :BusinessName              

 before_save :encrypt_password

 def encrypt_password
   self.salt = make_salt 
   self.encrypted_password=encrypt(password)
 end

 def make_salt
   secure_hash("#{Time.now.utc}--#{password}")
 end

 def encrypt(string)
   secure_hash("#{salt}--#{string}")
 end

 def secure_hash(string)
   Digest::SHA2.hexdigest(string)
 end

Хорошо, я проверил, и да, пароль, полученный из формы, является нулевым.Но я не понимаю почему.Это код формы:

 <h1>This is the page of <%= @merchant.Name %> </h1>

<p>Please enter the password to be used </p>
<%= random_generator %>
<%= form_for @merchant,:url=>{:action=>'approve'} do |m| %>
<%= m.label :Name %><br/>
<%= m.text_field :Name %><br/>

<%= m.label :password %><br/>
<%= m.text_field :password %><br/>
<%= m.submit "Approve" %>

<% end%>

Независимо от того, какой текст вводится в поле пароля, он отображается в действии Утвердить в контроллере, если яраспечатайте его напрямую с помощью params [: merchant] [: password].Но в модели это нуль

1 Ответ

1 голос
/ 19 сентября 2011

как и любой attr_accessor, вы можете получить его значение с помощью:

instance.password

Поместите строку debugger туда, где вы найдете это уместным и посмотрите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...