Могут направляющие, Направляющие Помощников (т.е. mymodel_path (модель)) Использоваться в Моделях?

Я реализовал неизменяемое решение 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;
};

Имена переменных могут быть сокращены, просто используются длинные, чтобы код может объяснить себя.

354
задан Simone Carletti 24 July 2009 в 09:36
поделиться

4 ответа

Я нашел ответ относительно того, как сделать это сам. В типовом кодексе, просто помещенном:

Для направляющих < = 2:

include ActionController::UrlWriter

Для направляющих 3:

include Rails.application.routes.url_helpers

Это волшебно делает thing_path(self), возвращают URL для текущей вещи, или other_model_path(self.association_to_other_model) возврат некоторый другой URL.

179
ответ дан iwasrobbed 23 November 2019 в 00:23
поделиться

Любая логика, имеющая отношение, что отображено в представлении, должна быть делегирована к вспомогательному методу, как методы в модели строго для обработки данных.

Вот то, что Вы могли сделать:

# 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) %>
13
ответ дан Mark Swardstrom 23 November 2019 в 00:23
поделиться

В то время как мог бы быть путь, я буду склонен не допускать такую логику в Модель. Я соглашаюсь, что Вы не должны помещать это в представление (, сохраняют его тощим ), но если модель не возвращает URL как часть данных к контроллеру, материал маршрутизации должен быть в контроллере.

1
ответ дан Ryan Montgomery 23 November 2019 в 00:23
поделиться

(Редактирование: Забудьте мой предыдущий лепет...)

хорошо, могли бы быть ситуации, куда Вы перейдете или к модели или к некоторому другому URL... Но я действительно не думаю, что это принадлежит модели, представление (или возможно модель) звучит более соответствующим.

О маршрутах, насколько я знаю, маршруты для действий в контроллерах (ведьма обычно "волшебно" использует представление), не непосредственно к представлениям. Контроллер должен обработать все запросы, представление должно представить результаты, и модель должна обработать данные и служить им представлению или контроллеру. Я услышал много людей, здесь говорящих о маршрутах к моделям (к точке, я почти запускаю к beleave ее), но насколько я понимаю: маршруты переходят к контроллерам. Конечно, много контроллеров является контроллерами для одной модели, и часто называется <modelname>sController (например, "UsersController" является контроллером модели "User").

, Если Вы пишете противные суммы логики в представлении, попытайтесь переместить логику, где-нибудь более соответствующую; логика запроса и внутренней связи, вероятно, принадлежит контроллера, связанная с данными логика может быть помещена в модель (но не логика дисплея, которая включает теги link и т.д.), и логика, которая является просто связанным дисплеем, был бы помещен в помощника.

0
ответ дан Stein G. Strindhaug 23 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

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