我在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
谢谢。
答案 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"