Ruby on rails 如何在rails PUT请求中使用电子邮件地址作为参数?
我已经在config.rb中配置了一个路由Ruby on rails 如何在rails PUT请求中使用电子邮件地址作为参数?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我已经在config.rb中配置了一个路由 resources :password 当参数不是电子邮件地址时,它工作正常 当参数为电子邮件地址时,它将显示错误: 开始输入“/密码/example@gmail.com.json“对于127.0.0.1 at 2012-02-22 17:04:17+0800 ActionController::RoutingError(没有与[PUT]匹配的路由) “/密码/example@gmail.com.json”): 更新1 这是我的密码控制器 def
resources :password
当参数不是电子邮件地址时,它工作正常
当参数为电子邮件地址时,它将显示错误:
开始输入“/密码/example@gmail.com.json“对于127.0.0.1 at
2012-02-22 17:04:17+0800
ActionController::RoutingError(没有与[PUT]匹配的路由)
“/密码/example@gmail.com.json”):
更新1
这是我的密码控制器
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
谢谢。如果您使用自定义字符串而不是id,请尝试
resources :password, :constraints => { :id => /.*/ }
也许我不太理解这个问题,但也许这里的问题是
@
不是可以在URL中使用的未编码字符
我怀疑在传入params之前需要对电子邮件地址进行编码,您可以按如下方式执行此操作:
如果电子邮件=”hello@mac.com“
试试类似的方法
URI.escape(email, '@')
这会回来的
"hello%40mac.com"
Base64.urlsafe_encode64('robocop@mail.ua")
Base64.urlsafe_decode64('cm9ib2NvcEBtYWlsLnVh')
问题是电子邮件地址包含“.”然后尝试URI.escape(电子邮件“@.”)它正在工作,但出现另一个错误“在8ms内完成406不可接受”我认为json mime类型无法识别。你能试着回答吗?并向我显示params的值(将它们放到控制台)让我们看看params[:format]
=> "cm9ib2NvcEBtYWlsLnVh"
=> "robocop@mail.ua"