【发布时间】:2013-04-03 10:33:02
【问题描述】:
我有这个网址:
http://localhost:3000/blog/posts?locale=en
我有一个助手可以删除 url 的?locale=en:
def url_without_locale_params(url)
uri = URI url
params = Rack::Utils.parse_query uri.query
params.delete 'locale'
uri.query = params.to_param
uri.to_s
end
有了这个助手,我得到了这个网址http://localhost:3000/blog/posts?。我想删除尾随的?。
结果应该是http://localhost:3000/blog/posts。
【问题讨论】:
-
问号后面的URL部分称为“查询字符串”。
-
正确的答案是将
nil分配给params,正如 Mike Campbell 所说。 -
很容易理解为什么你会尝试使用字符串操作来处理返回的 URL,但是,当使用一个设计来管理这些东西的类时,利用它的特性真的很好。不过,URI 并不是 Ruby 的最佳/功能最全的 URI 工具。如果您想要更全面的内容,请查看Addressable::URI。
-
@theTinMan 我已使用此功能,因为我无法从控制器中删除 set_locale。你可以看看这个问题stackoverflow.com/questions/15767715/…。如果有其他方法删除 set_locale 我将非常感激听到你的方法!谢谢
-
Ruby 的 URI(或 Addressable::URI)为您提供了从查询中删除元素和/或完全删除查询的方法。如果您在收到 URL 时只得到
?locale=en,那么设置uri.query=nil,正如 Mike Campbell 所说,是正确的,因为它将完全摆脱 URL 的查询部分。在 URI 处理后使用字符串操作会产生代码异味,我们有时必须这样做,但最好避免。
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2