0

我正在尝试使用控制器和操作来进行简单的检查,以查看具有该电子邮件地址的用户帐户是否存在。

控制器的动作如下所示:

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@website.com

当我这样做时,我可以在 Ruby 控制台中看到正在查询以下内容:

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

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

但是,当我去:

http://localhost:3000/home/checkEmail/email@website.co.uk

我收到路由错误:

No route matches [GET] "/home/checkEmail/email@website.co.uk"

我的 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
4

1 回答 1

1

是的,Rails 中的默认行为是将路由中的点 (.) 视为格式说明符,而不是参数的一部分。为了匹配点作为参数的一部分,请像这样指定路由:

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

这是描述问题和修复的帖子: http: //coding-journal.com/rails-3-routing-parameters-with-dots/

于 2012-10-17T14:24:47.113 回答