Краткий ответ: Нет. Вы не хотите максимально чистить представление от логики. Что еще более важно, лучше использовать спокойную настройку, а не складывать больше логики в один контроллер и / или модель. В данном случае речь идет об аутентификации пользователя. Обычно проверка того, что пользователь вошел в систему против действия, выполняется с помощью before_filter. Таким образом, вы можете использовать before_filter на контроллере. Используйте переданный метод, чтобы проверить, защищен объект или нет. Когда этот объект защищен, проверьте, аутентифицирован ли пользователь в настоящее время.
В фильтре before вы можете перенаправить на альтернативное действие, предпочтительно настроенное для использования формы пароля. Я бы, вероятно, создал отдельный контроллер для этого. Можете называть это сеансами или аутентификацией, если хотите. Установите новое действие для формы пароля и настройте действие создания. Новое представление должно содержать page_id в каком-то скрытом поле, или вы можете сохранить его в маршруте, используя вложенные ресурсы. Например:
resources :pages do
resource :session, :only => [:new, :create]
end
Это создаст маршруты вроде:
/pages/1/session/new
/pages/1/session (POST)
В вашем действии создания вы можете настроить что-то вроде хранилища сеансов (при условии, что пароль правильный). А в проверке подлинности просто проверьте значение этого хранилища сеансов.