2016-09-28 2 views
0

Говорить, что я пишу действие в своем контроллере.Rails: Разделите действие на несколько частей

Хотя у него много логик: несколько операторов if, также имеют случаи.

Есть ли способ, которым я могу сгруппировать эти логики, например, я хочу, чтобы все операторы if находились в одном файле и case операторов в другом файле. поэтому в моем контроллере мне не нужно писать целую кучу кодов, я могу просто вызвать файлы, содержащие эти утверждения. Как и в HTML, мы используем script тег для включения JS файлов

И, возможно, другие действия также могут использовать эти файлы в будущем.

ответ

1

Действия вашего контроллера не должны содержать этот объем бизнес-логики. Есть много возможных решений:

  • Вы можете переместить логику в вашу модели слой, используя model concerns разделить логику среди моделей

  • отогнать логику ваших действий в в нескольких многоразовых методы, и перенести эти методы в ваш ApplicationController, чтобы их можно было повторно использовать любыми контроллерами, которые наследуют от вашего ApplicationController.

  • ввести controller concern, содержащий соответствующую логику в фрагментированных методы и включает, которые касаются в контроллерах, которые нуждаются в доступе к логике.

Перемещение немного от встроенного Rails конвенций, вы можете ввести слой «служба» объекты, которые вы можете создать экземпляр для хранения многоразовых сгустков бизнеса-логики, которые не обязательно вписываются в вашу модели слой.

Их часто называют «услугами» или «операциями», и они находятся в app/services и app/operations соответственно. С точки зрения структуры кода, это будут простые классы, которые принимают входные данные от вашего контроллера, выполняют сложные операции на вашем уровне модели, а затем делают вывод доступным для вашего контроллера, чтобы он мог отображаться пользователю.

Существует дополнительный набор правил Rails, определенных в проекте под названием TrailBlazer, который может быть полезным шаблоном для моделирования вашего собственного уровня обслуживания/операции.

0

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

С вашего контроллера вы должны обрабатывать только HTTP-связанные вещи и делегировать правильную модель.

Предполагая, что это не Подход один для вас, вы можете также использовать ActiveRecord Concerns, они очень полезны для СУХИХ, что позволяет включать небольшие фрагменты кода reutilizable

Если это даже не соответствует вашим требованиям , вы можете поместить некоторые файлы .rb в app_folder/lib, это, как правило, автоматически загружается, и вам не нужно было его вручную.

Было бы очень полезно, если бы вы опубликовали код своего контроллера, который даст нам лучшее видение что вы пытаетесь сделать

Смежные вопросы