2012-10-17 52 views
0

我正在嘗試使用控制器和操作來執行簡單檢查,以查看是否存在具有該電子郵件地址的用戶帳戶。Rails 3:關於TLD的電子郵件作物的GET請求

控制器的操作是這樣的:

def checkEmail 
    email = params["email"] 
    if Account.find_by_email(email).blank? 
     render :inline=>"true" 
    else 
     render :inline=>"false" 
    end 
    end 

,並測試這個動作,我可以去:

http://localhost:3000/home/checkEmail/[email protected] 

當我這樣做,我可以在Ruby控制檯中看到以下被查詢:

Parameters: {"email"=>"[email protected]"} 
    Account Load (0.0ms) SELECT `accounts`.* FROM `accounts` WHERE `accounts`.`email` = '[email protected]' LIMIT 1 

您可以看到電子郵件地址的TLD已被裁剪掉。

然而,當我去:

http://localhost:3000/home/checkEmail/[email protected] 

我得到一個路由錯誤:

No route matches [GET] "/home/checkEmail/[email protected]" 

我的routes.rb文件看起來像這樣:

Gallery::Application.routes.draw do 

    #Match home URL 
    match 'home(/:file)' => "home#index" 
    match 'home/checkUser/:username' => "home#checkUser" 
    match 'home/checkEmail/:email' => "home#checkEmail" 

    root :to=> "home#index" 
end 

回答

1

呀, Rails中的默認行爲是將路由中的點(。)作爲格式說明符,而不是參數的一部分。 爲了點匹配作爲參數的一部分,指定這樣的路徑:

match "/home/checkEmail/:email" => "home#checkEmail", :constraints => { :email=> /[^\/]*/ } 

這裏的描述問題及更正後: http://coding-journal.com/rails-3-routing-parameters-with-dots/

+0

謝謝。您忘記在參數中更改「:搜索」到「:電子郵件」,但在此之後,它完美無缺地工作! –

+0

@StefanDunn哎呀,很好。 TY。 – MrTheWalrus

相關問題