Проблема
sort_by
не изменяет объект, это метод Enumerable, который возвращает массив, элементы которого являются элементами, полученными методом each
вашего объекта.Затем он сортирует этот массив по критериям, указанным в вашем блоке.Но обратите внимание, что он не сортирует ваш массив документов для Enumerable # sort_by
Обычно вы можете делать то, что предложил Адриан, и присваивать результаты обратно исходной переменной,но ваш оригинал - это константа, которая может вызвать проблемы.
Решение (я)
Так что вам нужно либо сделать ALL_VIEWS
чем-то другим, чем константой (если выжелая изменить это, тогда это действительно не должно быть постоянной в любом случае).Возможно, переменная класса?
Или вам нужно отсортировать эти значения, прежде чем они будут присвоены ALL_VIEWS
ALL_VIEWS = view_paths.map do |path|
View.new 'views/pages' , path
end.sort_by do |view|
view.permalink.length
end
Или вы можете отсортировать их с помощью чего-либокроме sort_by
метода
ALL_VIEWS.sort! do |view1,view2|
view1.permalink.length <=> view2.permalink.length
end
Это будет работать, но опять же, если вы делаете такие вещи, тогда ALL_VIEWS действительно должна быть константой? документы для Array # sort и Array # sort!