nut*_*ker 7 ruby url routes ruby-on-rails
我想要一个名为same_url的方法?如果传入的URL相等,则返回true.传入的URL可能是params选项hash或strings.
same_url?({:controller => :foo, :action => :bar}, "http://www.example.com/foo/bar") # => true
Run Code Online (Sandbox Code Playgroud)
Rails框架帮助器current_page?似乎是一个很好的起点,但我想传递任意数量的URL.
作为额外的奖励如果可以传入从比较中排除的参数的散列,那将是很好的.因此方法调用可能如下所示:
same_url?(projects_path(:page => 2), "projects?page=3", :excluding => :page) # => true
Run Code Online (Sandbox Code Playgroud)
这是方法(在/ 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
Run Code Online (Sandbox Code Playgroud)
如果您使用的是2.0之前的Rails,则还需要将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
Run Code Online (Sandbox Code Playgroud)
Rails的后续版本(好的,ActiveSupport)except
已经包含(信用:Brian Guthrie)
这就是你所追求的东西吗?
def same_url?(one, two)
url_for(one) == url_for(two)
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1111 次 |
最近记录: |