ruby-on-rails - скачать - семь баз за семь недель pdf
Каков наилучший способ в Rails определить, равны ли два(или более) заданных URL(как строки или хэш-варианты)? (2)
Вот метод (запишите его в / 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
Хэша:
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
уже (кредит: Брайан Гатри )
Я хочу метод, называемый same_url? который вернет true, если переданные в URL-адреса равны. Переданные в URL-адресах могут быть либо параметрами хэша параметров, либо строками.
same_url?({:controller => :foo, :action => :bar}, "http://www.example.com/foo/bar") # => true
Справочная страница Rails Framework current_page? кажется хорошей отправной точкой, но я хотел бы передать произвольное количество URL-адресов.
В качестве дополнительного бонуса было бы хорошо, если бы хэш из параметров, чтобы исключить из сравнения, мог быть передан. Таким образом, вызов метода может выглядеть так:
same_url?(projects_path(:page => 2), "projects?page=3", :excluding => :page) # => true
Это то, что вам нужно?
def same_url?(one, two)
url_for(one) == url_for(two)
end