设计更改密码表单不起作用

par*_*ark 1 forms email passwords ruby-on-rails devise

我正在尝试使用Devise在应用程序中实现密码重置功能.我正处于"忘记密码"链接工作的位置(因为它发送电子邮件),并且电子邮件包含"更改我的密码"的链接.

更改密码链接工作并将您发送到一个表单(在URL http://localhost:3000/users/password/edit?reset_password_token=c7cKb4hMhSLRs72n9dYj),要求输入新密码(并进行确认),但在输入新密码并单击"填写我的密码"后,它会重定向到localhost:3000/users/password并说"请"回顾下面的问题:"并提供一个带有一个字段的电子邮件,以及一个用于"发送密码重置说明"的按钮.当然,这是提交您的电子邮件以获取密码重置说明的表单,但它也有一个"不能为空"的错误通知,就像有人点击该字段为空的按钮一样.

我使用教程配置ActionMailer来发送电子邮件,我认为这将是这个过程中最困难的部分,但现在我无法弄清楚为什么更改一个人的密码的表单不起作用.

我对Rails很新,这是我第一次与Devise和ActionMailer合作,所以如果我没有提供一些必要的信息,我会道歉.只是让我知道,我可以添加任何有用的东西.

谢谢.

par*_*ark 8

好的,所以在今晚Rails会议上有人的帮助下,我发现了问题所在.它与控制器或路由没有任何关系,而是我通过错误地向表单添加一些代码而导致了错误.这是我的表单的更正代码:

<h2>Change your password</h2>

<%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name),
         html: { method: :put, class: "pure-form pure-form-stacked" }) do |f| %>
  <%= f.error_notification %>

  <%= f.hidden_field :reset_password_token %>

  <%= f.input :password, label: "New password", autofocus: true, required: true %>
  <%= f.input :password_confirmation, label: "Confirm new password", required: true %>

  <div><%= f.submit "Change my password", class: "pure-button" %></div>
<% end %>

<%= render "devise/shared/links" %>
Run Code Online (Sandbox Code Playgroud)

我的问题是,我没有将该class: "pure-form pure-form-stacked行作为第二个键/值对包含在内,而是html: {}有了第二html: {}行.

如果不清楚,我有这个:

html: { method: :put },
html: { class: "pure-form pure-form-stacked" }
Run Code Online (Sandbox Code Playgroud)

而不是这个:

html: { method: :put, class: "pure-form pure-form-stacked" }
Run Code Online (Sandbox Code Playgroud)

由于某种原因,在第一个版本中,只有第二个版本html: {}与表单一起提交,因此它不会作为put请求处理.