html - 错误的 URI Ruby on Rails : is it because long?

标签 html ruby-on-rails ruby http uri

所以我有一个完全可用的网站,在 URL 中编码了一些 URI。

但是,当我尝试将 URL 传递到我的 chrome 浏览器时:

http://somewhere:3000/find/someOne?utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A %22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22 %22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22% 22%2C%22taxRate%22%3A%22%22}

-- 它在浏览器中抛出一个错误:

Bad Request

bad URI `/find/someOne?utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A%22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22%22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22%22%2C%22taxRate%22%3A%22%22}'.

WEBrick/1.3.1 (Ruby/1.9.3/2014-11-13) at somewhere.com:3000

还在 Rails 控制台中显示 [2016-07-04 18:11:31] ERROR bad URI

版本:

  • rails3
  • ruby 1.9.3

知道如何让它工作吗?是因为URI中的{}还是太长了?

最佳答案

根据传入请求解析 Controller 中的路径,使用 Rack::Utils#parse_nested_query,参见:http://www.rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query

# config/routes.rb

get '/find/someOne/*str' => 'find#someOne'


# app/controllers/find_controller.rb

class FindController < ApplicationController
  def someOne
    custom_params = Rack::Utils.parse_nested_query(request.env['ORIGINAL_FULLPATH'])
    querys_hash = JSON.parse(custom_params["querys"])
  end
end

通过控制台的例子:

$ bundle exec rails c
Running via Spring preloader in process 31944
Loading development environment (Rails 5.0.0)
irb(main):001:0> custom_params = Rack::Utils.parse_nested_query "utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A%22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22%22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22%22%2C%22taxRate%22%3A%22%22}"
=> {"utf8"=>"✓", "search"=>"someThing", "choicen"=>"no", "querys"=>"{\"peopleName\":\"\",\"peopleGroup\":\"\",\"place\":\"\",\"pip\":\"\",\"hw\":\"\",\"somerock\":\"\",\"rocksomerock\":\"\",\"diedAt\":\"2016-01-01 - 2016-12-31\",\"borndAt\":\"\",\"taxRate\":\"\"}"}
irb(main):002:0> querys_hash = JSON.parse custom_params["querys"]
=> {"peopleName"=>"", "peopleGroup"=>"", "place"=>"", "pip"=>"", "hw"=>"", "somerock"=>"", "rocksomerock"=>"", "diedAt"=>"2016-01-01 - 2016-12-31", "borndAt"=>"", "taxRate"=>""}

关于html - 错误的 URI Ruby on Rails : is it because long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193965/

相关文章:

php - 我有一个带有 html div 内容的 php 脚本。需要使用包括 css 的 html 代码获取 php

ruby-on-rails - 如何将 Rails 打包为独立的可执行文件

ruby-on-rails - 如何在 ruby​​ on Rails 中实现显示所有评论功能?

javascript - 如何在此 jQuery 中添加 HTML 元素?

html - 使用 css 调整图像大小以适应响应列单元格

html - CSS 过渡属性在页面加载时触发

ruby-on-rails - Rspec 测试在错误的环境中运行?

mysql - 存储访问器问题 : Can't read old already stored json object serialized ( hash ) values in mysql database in Rails 4

ruby - 如何修复 RVM gem "[ missing bin/ruby ]"

ruby - 如何在带有 Ransack Gem 的 Rails 4 中将 sort_link 与模型实例方法一起使用?