gpt4 book ai didi

ruby-on-rails - Rails 中确定两个(或更多)给定 URL(作为字符串或哈希选项)是否相等的最佳方法是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:53 26 4
gpt4 key购买 nike

我想要一个名为 same_url 的方法?如果传入的 URL 相等,它将返回 true。传入的 URL 可能是参数选项散列或字符串。

same_url?({:controller => :foo, :action => :bar}, "http://www.example.com/foo/bar") # => true

Rails 框架助手 current_page?似乎是一个很好的起点,但我想传入任意数量的 URL。

作为一个额外的好处,如果可以传入要从比较中排除的参数的哈希值,那就太好了。因此方法调用可能如下所示:

same_url?(projects_path(:page => 2), "projects?page=3", :excluding => :page) # => true 

最佳答案

这是方法(将其绑定(bind)到/lib 并在 environment.rb 中要求它):

def same_page?(a, b, params_to_exclude = {})
if a.respond_to?(:except) && b.respond_to?(:except)
url_for(a.except(params_to_exclude)) == url_for(b.except(params_to_exclude))
else
url_for(a) == url_for(b)
end
end

如果您使用的是 Rails pre-2.0.1,您还需要将 except 辅助方法添加到 Hash 中:

class Hash
# Usage { :a => 1, :b => 2, :c => 3}.except(:a) -> { :b => 2, :c => 3}
def except(*keys)
self.reject { |k,v|
keys.include? k.to_sym
}
end
end

Rails 的更高版本(以及 ActiveSupport)已经包含 except(来源:Brian Guthrie)

关于ruby-on-rails - Rails 中确定两个(或更多)给定 URL(作为字符串或哈希选项)是否相等的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/126332/

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