Каков лучший способ в направляющих, чтобы определить, равны ли два (или больше) данный URL (как строки или опции хеша)?

Ситуация для ES 6

Предстоящая спецификация языка ECMAScript, издание 6, включает регулярные выражения, поддерживающие Unicode. Поддержка должна быть активирована с помощью модификатора u в регулярном выражении. См. регулярные выражения, поддерживающие Unicode в ES6 .

До тех пор, пока ES 6 не будет закончена и широко распространена среди поставщиков браузеров, вы все равно по-своему. Обновление: теперь существует транспилер с именем regexpu , который преобразует регулярные выражения Unicode ES6 в эквивалентные ES5. Он может использоваться как часть процесса сборки. Попробуйте в Интернете.

Ситуация для ES 5 и ниже

Несмотря на то, что JavaScript работает в строках Unicode, он не реализует классы символов, совместимые с Unicode, и не имеет понятия классов символов POSIX или блоков / поддиапазонов Unicode.

7
задан nutcracker 15 March 2009 в 23:36
поделиться

3 ответа

Вот метод (закупорите его в / 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.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

Более поздняя версия направляющих (хорошо, ActiveSupport) включают except уже (кредит: Brian Guthrie)

5
ответ дан 7 December 2019 в 10:10
поделиться

Действительно ли это - вид вещи, которая Вы после?

def same_url?(one, two)
  url_for(one) == url_for(two)
end
1
ответ дан 7 December 2019 в 10:10
поделиться
def all_urls_same_as_current? *params_for_urls
  params_for_urls.map do |a_url_hash| 
    url_for a_url_hash.except(*exclude_keys)
  end.all? do |a_url_str|
    a_url_str == request.request_uri
  end
end

Где:

  • params_for_urls массив хешей параметров URL (каждая запись массива параметрические усилители для создания URL),
  • exclude_keys массив символов для ключей, которые Вы хотите проигнорировать
  • request.request_uri может не быть точно, что необходимо использовать, посмотрите ниже.

Затем существуют все виды вещей, которые Вы захотите рассмотреть при реализации версии:

  • Вы хотите сравнить полный uri с доменом, портом и всеми или просто путем?
  • если просто путь, Вы хотите все еще выдержать сравнение, аргументы передали после вопросительного знака или просто тех, которые составляют фактический путь пути?
0
ответ дан 7 December 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: