В этом посте мы рассмотрим то, как перенести бизнес-логику из Представления в Контроллер в соответствии с MVC-паттерном.
Также мы поговорим о том, как долго переменные экземпляров контроллера остаются на месте.
Действия (методы) внутри контроллера
Если действие (метод) ничего не делает, мы можем просто убрать его.
Пока определен правильный маршрут и есть правильно названный файл/шаблон представления, действие не обязано присутствовать, и Rails найдет правильный шаблон при помощи конвенции.
Контроллер: новый вид
Так что, мы можем закомментировать (или просто удалить) действия в нашем контроллере, и он всё еще будет работать.
Но, конечно же, есть причина иметь действия внутри контроллера, они не просто для декорации.
Переносим бизнес-логику
Наше приложение работает, но бизнес-логика не должна находиться во View. Представление должно иметь настолько мало Ruby-кода, насколько это возможно.
Давайте перенесем эту бизнес-логику из Представления в Контроллер.
Переменные экземпляров из контроллера доступны внутри view.
Попробуем также добавить счетчик просмотров. Изначально, @times_displayed
будет равняться 0, и с каждым просмотром страницы это число должно увеличиваться на 1.
Здесь мы просто используем переменные из контроллера.
Посмотрим что получилось.
В обоих случаях просмотрено 1 раз? Интересно.
Переменные экземпляров в Rails
Дело в том, что, в отличие от других веб-фреймворков (к примеру, Servlets), вы не можете хранить значения в переменных контроллера между запросами.
Таким образом, каждый новый запрос создает новую переменную экземпляра.
Какие альтернативы? Можно хранить их в HTTP-сессии, либо в базе данных.
В итоге
Старайтесь держать бизнес-логику вне View.
Переменные экземпляров в контроллере доступны для View.
Переменные экземпляров не задерживаются между запросами.