获取原始参数而不是"加工成哈希"版本

Max*_*ams 4 ruby-on-rails ruby-on-rails-3

Rails 3问题.

如果我发送这样的请求 PUT http://myapp/posts/123?post[title]=hello

然后在我的控制器中我得到了 params = {:id => 123, :post => {:title => "hello"}}

这通常很好,通常对例如有用 Post.create(params[:post])

但是,在这种情况下我需要访问params的'raw'形式,所以我可以命令它们取出值,将它们全部作为简单的字符串处理,即我希望它们列出,所以param名称是"post[title]"和param价值是"hello".

有没有办法得到这些价值观?我想可能有一种方法,request它有原始的拉丝形式的参数,但我找不到一个.

我试图将哈希转换回带有to_param的字符串,但这看起来很脏但可能是不必要的.

作为奖励,我希望它忽略:id参数,字面上只是参加了之后的部分?在原始请求中.事实上,如果我可以回到原始请求字符串,即"http://myapp/posts/123?post[title]=hello"那样做:我可以拆分?并从那里拿走它.我刚刚想到我可以从标题中得到它.在此期间,如果有人知道更好的方式,请告诉我,请:)

感谢任何建议 - 最多

mu *_*ort 7

请不要手工解析.从Rails请求中获取URI :

url = request.url
# Or, depending on the Rails version and stack
url = request.request_uri
# Or even
url = request.scheme + '://' + request.host_with_port + request.fullpath
Run Code Online (Sandbox Code Playgroud)

返回值request.url似乎取决于您的服务器堆栈,request.request_uri应该修复它但在Rails 3.1中似乎不存在.第三个"自己构建"的方法应该在各处产生一致的结果.叹.

然后,一旦你有了URI,使用URI.parseURI.decode_www_form解析它:

u = URI.parse(url)
q = URI.decode_www_form(u.query)
# if u.query was "a=b&c=d&a=x" then q is
# [["a", "b"], ["c", "d"], ["a", "x"]]
Run Code Online (Sandbox Code Playgroud)