首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么虚拟属性被设置为null?

为什么虚拟属性被设置为null?
EN

Stack Overflow用户
提问于 2011-09-19 04:58:17
回答 1查看 165关注 0票数 0

我正在开发一个ruby on rails的注册/登录系统。

我有一个ruby on rails表单,它有一个虚拟属性- password。响应表单提交的操作将更新模型对象并保存它。在保存回调之前:before_save调用encrypt_password方法。但是,我不认为virtual属性会从表单中获取值。这是因为当我尝试登录失败时,repeatedly.The代码是:

代码语言:javascript
运行
复制
 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

好的,我检查了一下,是的,从表单中获得的密码是空的。但我不明白为什么。这是表单的代码:

代码语言:javascript
运行
复制
 <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" %>

<%结束%>

无论在password字段中输入的是什么文本,如果我直接使用params:merchant打印它,那么在控制器的Approve操作中就可以看到它。但是在模型中它是空的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-19 05:12:10

与任何attr_accessor一样,您可以通过以下命令获取它的值:

代码语言:javascript
运行
复制
instance.password

将一些debugger行放在您认为相关的地方,并查看一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7464424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档