2013-08-05 156 views
0

即使我相信该操作存在于我的控制器中,我仍然收到路由错误。路由错误:没有路由匹配

的routes.rb:

Build::Application.routes.draw do 
    resources :users do 
    match 'users/:id' => 'users#username' 
    get 'validate_username', on: :member 
    get 'validate_email', on: :member 
    end 
end 

new.html.erb:

$("#user_email").on('blur', function(){ 
    if($(this).val()!=""){ 
     user_email = $(this).val(); 
     $.ajax({ 
      url:"<%=validate_email_user_path%>", 
      type:'GET', 
      data: {email: user_email}, 
      success: function(data,status,xhr){ 
       console.log(data); 
       alert(data.message); 
     }); 

耙路线:

validate_email_user GET /users/:id/validate_email(.:format)       users#validate_email 

我是什么乐队克错了?

回答

2

如果你想在短短的电子邮件,而不是现有的用户传递,那么我会认为你需要更新你的路线。

此:

get 'validate_email', on: :member

应该

get 'validate_email/:email', on: :collection

在用户的集合“,你不需要一个用户/用户ID传递到_path帮手。您的路线的实际URL将为/ users/validate_email而不是/ users /:id/validate_email

路由的电子邮件部分将使控制器方法中的params [:email]可用。

+0

我试过这个,但是我得到一个奇怪的错误。出于某种原因,它传递了params id = validate_email。这里是我的日志消息:开始获取“/users/validate_email?email=test%40test.com”为127.0.0.1在2013-08-05 17:53:20 -0400 处理UsersController#显示为*/* 参数:{“email”=>“[email protected]”,“id”=>“validate_email”} – scientiffic

+0

您在routes.rb文件中使用的“最终”路线是什么?只是所以我回答/正确回应:) –

+0

好吧,它结束了这个工作:得到'validate_email',在:收集。非常感谢您的帮助! – scientiffic

0

您需要为用户提供URL助手。

2

你无论如何都在传:ID

validate_email_user_path user.id 

validate_email_user_path user 
+0

好的,但我正在验证用户在注册时输入的电子邮件地址,所以我实际上不想指向特定用户标识(没有人登录)。我将如何做到这一点? – scientiffic

+0

到目前为止,我还没有实现它,但我会建议尝试类似于获取''users /:email/validate_email'=>'users#show''或查看http://railscasts.com/episodes/314-pretty-urls-with-friendlyid?view = asciicast – Zippie

+0

对,但是你指定的路由需要用户的id。 :id部分是不可协商的。如果要在注册之前明确验证用户电子邮件,请考虑创建仅接受user_email作为参数的路由。 –

0

这不是您的问题的直接答案,但可能有帮助。

您是否知道client_side_validations gem?我认为你可以使用它,而不是由你自己来实现一切。它在github上可用。

相关问题