2013-08-05 150 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上可用。

相關問題