Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将此表单的结果提交给方法?_Ruby On Rails_Ruby On Rails 3_Devise_Routes - Fatal编程技术网

Ruby on rails 如何将此表单的结果提交给方法?

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

我在提交这份表格时遇到了一个命名错误,我不知道如何让它工作。这只是一个通过Desive gem的密码重置表单,并尝试
@用户。在控制台中发送\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”能够很好地读取它

您可能还希望在控制器方法中执行一些错误捕获。重置电子邮件密码最常见的问题是,电子邮件中有输入错误,您将无法找到用户。发生这种情况时,向用户返回消息是很有帮助的

祝你好运