Используем модели без привязки к базе данных
Наверняка каждому разработчику приходилось сталкиваться с формами, данные в которых необходимо как-то обработать, но при этом не сохранять в базу. Для таких случаев в Rails 3 есть модуль ActiveModel, который позволяет обычные Ruby-модели вести себя как ActiveRecord-модели. Подробности под катом.
Предположим, что вам необходимо реализовать на сайте простейшую форму обратной связи — имя, e-mail и текст сообщения. Обычно, код контроллера, обрабатывающего отправку формы выглядит примерно вот так:
А что если полей будет не 3, а, допустим, 10 и всех их нужно будет валидировать по-разному? И вообще, валидация — дело модели, а не контроллера. Но при отправке письма нам не нужно создавать, записи в базе, соответственно, использовать ActiveRecord-модель — не совсем наш вариант. Но мы можем пойти другим путём!
Теперь FeedbackForm ведёт себя как стандартная рельсовая модель — мы можем рисовать для неё формы с помощью
form_for @feedback_form, url: send_email_path
и использовать стандартную рельсовую валидацию. Да, код стал чуть объёмнее, но возросла читаемость кода и его расширяемость. В ближайших постах я подробно расскажу об использовании других модулей ActiveModel.