我有一个显示用户密码的表单<% form_for(@player) do |f| %>
<%= f.label :password %><br />
<%= f.text_field :password %>
我想隐藏密码(只显示一个空白文本框),如果文本框不为空,则仅在提交时更新密码。真的很感激任何帮助。
答案 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
将不会更新它。