RoR:更新用户密码

时间:2011-12-03 14:07:20

标签: ruby-on-rails ruby

我有一个显示用户密码的表单<% form_for(@player) do |f| %>

<%= f.label :password %><br />
<%= f.text_field :password %>

我想隐藏密码(只显示一个空白文本框),如果文本框不为空,则仅在提交时更新密码。真的很感激任何帮助。

3 个答案:

答案 0 :(得分:3)

在您的播放器模型中(我假设它是代表您的用户的播放器模型),此代码确实需要您:

# user will be able to edit her profile without providing password
validates_presence_of :password, :on => :create
validates_confirmation_of :password, :allow_blank => true

# you may also need to set the required length
validates_length_of :password, :within => 6..40, :allow_blank => true

在您看来,只需使用password_field而不是text_field。使用password_field,您不必将值设置为空字符串。

答案 1 :(得分:2)

Ryan Bates' Authentication from Scratch拥有您需要的一切以及更多。

查看演示说明的用户模型(before_save hook和validates_presence_of :password, :on => :create)。

永远不要使用text_field作为密码。请改用password_field(这将为您隐藏)。

答案 2 :(得分:1)

我不完全确定我清楚你要问的是什么,但这是我的建议。在视图中:

<%= f.label :password %><br />
<%= f.password_field :password, :value => "" %>

然后在你的控制器中:

if param[:player][:password].blank? == false
  @player.password == param[:player][:password]
end

我相信这会设置一些东西,只有当它不是零而不是空时才会保存。同时使:password字段不是模型中的attr_accessible变量...

编辑:明确最后的评论。如果它不是attr_accessible,则模型实例方法update_attributes将不会更新它。