2012-02-22 65 views
4

我在config.rb如何将电子邮件地址用作Rail PUT请求中的参数?

resources :password 

配置路由当参数不是一个电子邮件地址,它工作正常。

当参数是一个电子邮件地址,它会告诉我的错误:

Started PUT "/password/[email protected]" for 127.0.0.1 at 2012-02-22 17:04:17 +0800

ActionController::RoutingError (No route matches [PUT] "/password/[email protected]"):

UPDATE1

这是我的密码控制器

def update 
    return_info = User.change_password(params[:id],params[:old],params[:newpw],params[:newpw2]) 

    respond_to do |format| 
     format.json { render :json => {:info => t(return_info)} } 
    end 

    end 

谢谢。

回答

10

如果使用自定义字符串,而不是ID尝试

resources :password, :constraints => { :id => /.*/ } 
+0

它的工作,但得到另一个错误 “已完成406在8ms的不接受” – jean 2012-02-22 12:01:07

+0

我认为JSON MIME类型无法识别。你可以试试 respond_with http://apidock.com/rails/ActionController/MimeResponds/respond_with?让我们看看params [:format] – Fivell 2012-02-22 12:39:44

3

也许我没有正确地理解这个问题,但也许这里的问题是@不是一个字符,你可以在URL中使用未编码。

我怀疑的电子邮件地址需要在PARAMS传递之前进行编码,你可以做到这一点,如下所示:

如果email = "[email protected]"尝试像

URI.escape(email, '@') 

这将返回

"hello%40mac.com" 
+1

问题是电子邮件地址包含“。”,并且显示params的值(将它们放到控制台) – jean 2012-02-22 11:59:39

+1

然后尝试URI.escape(电子邮件,'@。') – novemberkilo 2012-02-22 20:58:08

相关问题