Поставете вашите контролери и модели на диета от Sébastien Carceles Dev on Rails Medium
Или как да отделите бизнес кода и рамковия код с помощта на Interactors.

Вашият проект се разраства. Малко по малко контролерите и моделите поемат отговорността за извършване на бизнес операции. Те се замърсяват. Бизнес кодът се смесва с рамков код.
Това е феномен, наречен „контролери за мазнини/модели на мазнини“ и е ясен индикатор, че проектът бързо ще стане труден за поддържане и мащабиране.
Ние обаче знаем, че:
- администраторът трябва да обработва само заявки на клиенти
- моделът трябва да се грижи само за постоянството на данните
Подобен код се среща в много проекти. В горния пример действието за създаване на контролера натрупва отговорностите:
- създаване на компания
- използвайте услуга на трета страна
- обогатяват Компанията
- управлявайте грешки в случай на отказ на услугата на трета страна или валидиране на данни
- уведомете мениджър по имейл в случай на успех
- отговор на потребителя
Този проблем, който може да бъде обобщен чрез „Виждам проблема, но къде трябва да поставя кода си?“, Се решава от няколко модела на проектиране. Когато говорим за бизнес операции (а бизнес операцията обикновено се състои от поредица от повече или по-малко сложни инструкции), най-простият и най-ефективен модел вероятно е Interactor. Може би вече го знаете като Бизнес обекти или Обекти на услуги.
Този модел предлага да се изолира бизнес операция в чист клас Ruby, с еднозначно име (тоест, което изразява добре извършената операция). Неговата роля е да извършва тази бизнес операция и нищо друго.
Тук например можем да създадем интерактор на име CreateCompany, чиято роля следователно е да създаде компания. За целта той ще изпълни изброените по-горе стъпки и ще управлява граничните случаи.
Това опростява контролера, който става клиент на този клас:
Фу, вече дишаме по-добре.
Можем да създадем класа CreateCompany от нулата. Трябва да дефинираме обща рамка за всички наши интерактори, т.е. общ API, така че всички интерактори на проекта да могат да се използват и да се държат по един и същи начин.