如何使用电子邮件地址作为rails PUT请求中的参数?

时间:2012-02-22 09:13:40

标签: ruby-on-rails ruby-on-rails-3

我在config.rb中配置了一个路由

resources :password

当参数不是电子邮件地址时,它工作正常。

当参数是电子邮件地址时,它会显示错误:

  

在127.0.0.1开始PUT“/password/example@gmail.com.json”   2012-02-22 17:04:17 +0800

     

ActionController :: RoutingError(没有路由匹配[PUT]   “/password/example@gmail.com.json”):

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

谢谢。

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:6)

Base64.urlsafe_encode64(' robocop@mail.ua')

=> "cm9ib2NvcEBtYWlsLnVh" 

Base64.urlsafe_decode64(' cm9ib2NvcEBtYWlsLnVh&#39)

=> "robocop@mail.ua" 

答案 2 :(得分:3)

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

我怀疑电子邮件地址需要在传递参数之前进行编码,您可以按照以下步骤进行编码:

如果email = "hello@mac.com"尝试类似

的话
URI.escape(email, '@')

这将返回

"hello%40mac.com"