【问题标题】:POST is going to 'new' and not 'create' RailsPOST 将“新建”而不是“创建”Rails
【发布时间】:2015-09-18 16:42:31
【问题描述】:

所以我正在尝试使用 bcrypt 在我的网站中实现 password_reset 功能。我遇到的一个问题是 POST 将转到我的新操作而不是我的创建操作。

我的观点

<%= form_for password_resets_path, method: 'post' do %>
<div>
  <h3>Please enter your email address</h3>
  <%= text_field_tag :email, params[:email] %>
</div>
<div>
  <%= submit_tag "Reset Password" %>
</div>

我的控制器

class PasswordResetsController < ApplicationController
 def new
 end
 def create
  user = User.find_by(email: params[:email])
  user.send_password_reset if user
  redirect_to root_url, :notice => 'Email sent with password reset instructions.'
 end
end

我的路线

resources :password_resets

我收到了这个错误

ActionController::RoutingError (No route matches [POST] "/password_resets/new"):

我已经研究过不同的解决方案,由于我没有@object 模型,因此对我不起作用。因为我只是想呼吁采取行动。

我觉得我错过了一些非常简单的东西,但对于我的生活,我一直无法弄清楚。非常感谢任何帮助我的人。

【问题讨论】:

  • 不是答案,但密码重置功能不需要所有的宁静路线。我建议你做到resources :password_resets, only: [:new, :create]
  • 谢谢帕万,我同意。遵循教程似乎没有必要,但我一直在遵循以确保我没有遗漏任何关键内容。

标签: ruby-on-rails railscasts password-recovery


【解决方案1】:

问题:&lt;%= form_for password_resets_path, method: 'post' do %&gt;

form_for 需要一个对象。如果您不想要对象,只需使用 form_tag 助手:

<%= form_tag password_resets_path do %>
  <%= text_field_tag :email, params[:email], placeholder: "Please enter your email address" %>
  <%= submit_tag "Reset Password" %>
<% end %>

这应该适合你。

【讨论】:

  • 你先生赢得了我所有的互联网!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多