Ruby on rails 如何将此表单的结果提交给方法?
我在提交这份表格时遇到了一个命名错误,我不知道如何让它工作。这只是一个通过Desive gem的密码重置表单,并尝试Ruby on rails 如何将此表单的结果提交给方法?,ruby-on-rails,ruby-on-rails-3,devise,routes,Ruby On Rails,Ruby On Rails 3,Devise,Routes,我在提交这份表格时遇到了一个命名错误,我不知道如何让它工作。这只是一个通过Desive gem的密码重置表单,并尝试@用户。在控制台中发送\u reset\u password\u指令就可以了 以下是我的观点: <%= form_tag reset_password_path(:email), :id => 'forgotten_password' do %> <%= email_field_tag :email, nil, :placeholder => 'E
@用户。在控制台中发送\u reset\u password\u指令
就可以了
以下是我的观点:
<%= form_tag reset_password_path(:email), :id => 'forgotten_password' do %>
<%= email_field_tag :email, nil, :placeholder => 'Email address' %>
<%= submit_tag "Reset password" %>
<% end %>
在我的控制器中:
def reset_password
@user = User.where(:email => params[:email]).first
@user.send_reset_password_instructions
end
以下是错误:
No route matches [POST] "/dashboard/reset_password/email"
您定义了响应
GET
请求的路径,并且您的表单正在发送POST
请求。尝试将路由方法从get
更改为post
您定义了用于响应get
请求的路由,并且您的表单正在发送post
请求。尝试将路由方法从get
更改为post
您的路由需要包含post方法,而不是get方法。它应该是/email
而不是/:email
post "/dashboard/reset_password/email" => "docs#reset_password", :as => :reset_password
您的路线需要包含POST方法,而不是GET方法。它应该是
/email
而不是/:email
post "/dashboard/reset_password/email" => "docs#reset_password", :as => :reset_password
因此,第一部分是将您的路线设置为POST而不是GET(如前所述)。通常,每当您将数据发送到服务器并导致更改(如在用户帐户上设置重置密码令牌并向他们发送电子邮件)时,您都会使用POST 将路线更改为如下所示:
POST "/dashboard/reset_password" => "docs#reset_password", :as => :reset_password
<%= form_tag reset_password_path, :id => 'forgotten_password' do %>
<%= email_field_tag :email, nil, :placeholder => 'Email address' %>
<%= submit_tag "Reset password" %>
<% end %>
注意:我还删除了路径的:email部分。你真的不需要
第二部分,你需要稍微调整一下你的形式。您不需要将:email符号传递到路径。我不确定在这种情况下这对你有什么好处。您在控制器(params[:email])中的params散列中获得电子邮件,因为您的表单中有一个电子邮件字段
将表单更改为如下所示:
POST "/dashboard/reset_password" => "docs#reset_password", :as => :reset_password
<%= form_tag reset_password_path, :id => 'forgotten_password' do %>
<%= email_field_tag :email, nil, :placeholder => 'Email address' %>
<%= submit_tag "Reset password" %>
<% end %>
“忘记密码”do%>
'电子邮件地址'%>
这将在表单HTML中生成POST表单路径“/dashboard/reset_password”。当用户单击页面上的“重置密码”按钮时,表单中的:email字段将提交给您。Rails将把它塞进参数中,您的控制器方法“reset_password”能够很好地读取它
您可能还希望在控制器方法中执行一些错误捕获。重置电子邮件密码最常见的问题是,电子邮件中有输入错误,您将无法找到用户。发生这种情况时,向用户返回消息是很有帮助的
祝你好运 因此,第一部分是让你的路线成为一个POST而不是GET(如前所述)。通常,每当您将数据发送到服务器并导致更改(如在用户帐户上设置重置密码令牌并向他们发送电子邮件)时,您都会使用POST 将路线更改为如下所示:
POST "/dashboard/reset_password" => "docs#reset_password", :as => :reset_password
<%= form_tag reset_password_path, :id => 'forgotten_password' do %>
<%= email_field_tag :email, nil, :placeholder => 'Email address' %>
<%= submit_tag "Reset password" %>
<% end %>
注意:我还删除了路径的:email部分。你真的不需要
第二部分,你需要稍微调整一下你的形式。您不需要将:email符号传递到路径。我不确定在这种情况下这对你有什么好处。您在控制器(params[:email])中的params散列中获得电子邮件,因为您的表单中有一个电子邮件字段
将表单更改为如下所示:
POST "/dashboard/reset_password" => "docs#reset_password", :as => :reset_password
<%= form_tag reset_password_path, :id => 'forgotten_password' do %>
<%= email_field_tag :email, nil, :placeholder => 'Email address' %>
<%= submit_tag "Reset password" %>
<% end %>
“忘记密码”do%>
'电子邮件地址'%>
这将在表单HTML中生成POST表单路径“/dashboard/reset_password”。当用户单击页面上的“重置密码”按钮时,表单中的:email字段将提交给您。Rails将把它塞进参数中,您的控制器方法“reset_password”能够很好地读取它
您可能还希望在控制器方法中执行一些错误捕获。重置电子邮件密码最常见的问题是,电子邮件中有输入错误,您将无法找到用户。发生这种情况时,向用户返回消息是很有帮助的
祝你好运