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

时间:2013-10-29 04:03:10

标签: ruby-on-rails forms email devise passwords

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:7)

好的,所以在今晚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" %>

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

如果不清楚,我有这个:

html: { method: :put },
html: { class: "pure-form pure-form-stacked" }

而不是:

html: { method: :put, class: "pure-form pure-form-stacked" }

由于某些原因,在第一个版本中,只有第二个html: {}与表单一起提交,因此未将其作为put请求进行处理。