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

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

我已经在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 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"