第12章是关于添加重置密码的方法。在开始时,我们创建一个名为PasswordResets的控制器。
对于create动作,该方法定义为:
def create
@user = User.find_by(email: params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
@user.send_password_reset_email
flash[:info] = "Email sent with password reset instructions"
redirect_to root_url
else
flash.now[:danger] = "Email address not found"
render 'new'
end
end
我的问题是:params的密钥[:password_reset]是如何创建的?它总是在那里,我们做了什么让它出现?
Params是我觉得有点混乱的东西,无法理解我的头脑!
答案 0 :(得分:0)
假设您正在谈论 Michael Hartl的 Rails教程: 您可以在密码重置表单的代码中看到有如下所示的行生成表单:
<%= form_for(:password_reset, url: password_resets_path) do |f| %>
和email
字段类似于<%= f.email_field :email, class: 'form-control' %>
因此,在呈现表单时,Rails将以form_name[field_name]
的格式呈现表单名称,以便电子邮件字段名称变为password_reset[email]
。当您访问控制器中的参数时,您会得到email
参数范围内的password_reset
参数值,因为params
是基本ruby hash
所以您的代码变为{{1} }。如果您愿意,可以更改表单名称,只需将params[:password_reset][:email]
中的password_reset
更改为form_for
或您喜欢的内容,就可以访问reset
我希望你理解我的观点。我不擅长解释。