<%=password_field 'email_setting','emailpasswd' %>
在此@email_setting.emailpasswd 的值是密码(@email_setting.emailpasswd="password")。
但是在 email_setting 表单中编辑密码文本框是空的。我需要显示一些字符(#######)来指示密码已经输入。
我正在使用 Rails 3。
<%=password_field 'email_setting','emailpasswd' %>
在此@email_setting.emailpasswd 的值是密码(@email_setting.emailpasswd="password")。
但是在 email_setting 表单中编辑密码文本框是空的。我需要显示一些字符(#######)来指示密码已经输入。
我正在使用 Rails 3。
你也可以这样做:
在 /config/initializers/my_constants.rb 中,使用您希望在密码输入框中向用户显示的值设置一个常量。
STARS_PASSWORD = '*******'
在 User 模型中,创建一个我们将从表单调用的方法,以确定在密码输入框中向用户显示的内容。
class User < ActiveRecord::Base
def password_form_value
password.present? ? STARS_PASSWORD : ''
end
end
在表单中,将 STARS_PASSWORD 显示为输入表单上的值,如果实际上用户已经设置了密码。
<%=form.password_field :password, :value => @user.password_form_value %>
在 UsersController 中,如果提交的密码是 STARS_PASSWORD,则在更新之前删除提交的密码。
params[:user].delete :password if params[:user][:password] == STARS_PASSWORD
注意:如果您在 User 模型上有密码验证器(例如,密码需要包含字母和数字),您还需要修改该验证器以允许 STARS_PASSWORD。
这是 Rails 的一项安全预防措施,即未预先填充密码字段。否则,它们将在页面源代码中以纯文本形式显示。
如果你真的想在那里显示它,你需要绕过表单助手并回退到纯 HTML:
<input type="password" name="email_setting[emailpasswd]" value="<%= @email_setting.emailpasswd %>" />
但是,如果您对密码进行哈希处理,那将无法正常工作。您无法“解密”散列密码,因此您无法在此处以纯文本形式显示它们。
password_field
nil
默认情况下以值呈现。这使得默认情况下使用密码是安全的。如果要呈现 的值,则password_field
必须执行例如
f.password_field(:password, :value => @user.password)
https://github.com/rails/rails/commit/1851af84c1c7244dc416be9c93a4700b70e801e3