Я реализовал неизменяемое решение ECMAScript 6
, основанное на ответе @Merc
здесь:
const moveItemInArrayFromIndexToIndex = (array, fromIndex, toIndex) => {
const newArray = [...array];
if (fromIndex === toIndex) return newArray;
const target = newArray[fromIndex];
const inc = toIndex < fromIndex ? -1 : 1;
for (let i = fromIndex; i !== toIndex; i += inc) {
newArray[i] = newArray[i + inc];
}
newArray[toIndex] = target;
return newArray;
};
Имена переменных могут быть сокращены, просто используются длинные, чтобы код может объяснить себя.
Я нашел ответ относительно того, как сделать это сам. В типовом кодексе, просто помещенном:
Для направляющих < = 2:
include ActionController::UrlWriter
Для направляющих 3:
include Rails.application.routes.url_helpers
Это волшебно делает thing_path(self)
, возвращают URL для текущей вещи, или other_model_path(self.association_to_other_model)
возврат некоторый другой URL.
Любая логика, имеющая отношение, что отображено в представлении, должна быть делегирована к вспомогательному методу, как методы в модели строго для обработки данных.
Вот то, что Вы могли сделать:
# In the helper...
def link_to_thing(text, thing)
(thing.url?) ? link_to(text, thing_path(thing)) : link_to(text, thing.url)
end
# In the view...
<%= link_to_thing("text", @thing) %>
В то время как мог бы быть путь, я буду склонен не допускать такую логику в Модель. Я соглашаюсь, что Вы не должны помещать это в представление (, сохраняют его тощим ), но если модель не возвращает URL как часть данных к контроллеру, материал маршрутизации должен быть в контроллере.
(Редактирование: Забудьте мой предыдущий лепет...)
хорошо, могли бы быть ситуации, куда Вы перейдете или к модели или к некоторому другому URL... Но я действительно не думаю, что это принадлежит модели, представление (или возможно модель) звучит более соответствующим.
О маршрутах, насколько я знаю, маршруты для действий в контроллерах (ведьма обычно "волшебно" использует представление), не непосредственно к представлениям. Контроллер должен обработать все запросы, представление должно представить результаты, и модель должна обработать данные и служить им представлению или контроллеру. Я услышал много людей, здесь говорящих о маршрутах к моделям (к точке, я почти запускаю к beleave ее), но насколько я понимаю: маршруты переходят к контроллерам. Конечно, много контроллеров является контроллерами для одной модели, и часто называется <modelname>sController
(например, "UsersController" является контроллером модели "User").
, Если Вы пишете противные суммы логики в представлении, попытайтесь переместить логику, где-нибудь более соответствующую; логика запроса и внутренней связи, вероятно, принадлежит контроллера, связанная с данными логика может быть помещена в модель (но не логика дисплея, которая включает теги link и т.д.), и логика, которая является просто связанным дисплеем, был бы помещен в помощника.