当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Rails确定两个(或更多)给定URL(作为字符串或哈希选项)是否相等的最佳方法是什么?》经验,为你挑选了1个好方法。

我想要一个名为same_url的方法?如果传入的URL相等,则返回true.传入的URL可能是params选项hash或strings.

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 

Dave Nolan.. 5

这是方法(在/ 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

如果您使用的是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

Rails的后续版本(好的,ActiveSupport)except已经包含(信用:Brian Guthrie)



1> Dave Nolan..:

这是方法(在/ 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

如果您使用的是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

Rails的后续版本(好的,ActiveSupport)except已经包含(信用:Brian Guthrie)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有