gpt4 book ai didi

ruby-on-rails - 获取原始参数而不是 "processed into hashes"版本

转载 作者:行者123 更新时间:2023-12-04 22:50:43 25 4
gpt4 key购买 nike

Rails 3 问题。

如果我发送这样的请求 PUT http://myapp/posts/123?post[title]=hello
然后在我的 Controller 中我得到 params = {:id => 123, :post => {:title => "hello"}}
这通常很好,通常对例如 Post.create(params[:post]) 有用

但是,在这种情况下,我需要访问参数的“原始”形式,以便我可以命令它们提取值,将它们全部作为简单字符串处理,即我希望它们列出,因此参数名称是 "post[title]" 和参数值为 "hello"

有什么办法可以得到这些值吗?我认为可能有一种 request 方法,其参数为原始字符串形式,但我找不到。

我曾想到尝试使用 to_param 将散列转换回字符串,但这似乎很脏,而且可能是不必要的。

作为奖励,我希望它忽略 :id 参数,实际上只是在 ?在原始请求中。事实上,如果我能取回原始的请求字符串,即 "http://myapp/posts/123?post[title]=hello" 那么就可以了:我可以在 ?并从那里拿走。我突然想到我可能可以从标题中获取它。与此同时,如果有人知道更好的方法,请告诉我:)

感谢任何建议 - 最大

最佳答案

请不要手动解析。从 Rails request 中获取 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
request.url 的返回值似乎取决于您的服务器堆栈, request.request_uri 应该可以解决这个问题,但在 Rails 3.1 中似乎不存在。第三种“自己构建”方法应该在任何地方产生一致的结果。叹。

然后,获得 URI 后,使用 URI.parse URI.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"]]

关于ruby-on-rails - 获取原始参数而不是 "processed into hashes"版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6441701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com