Я занимаюсь разработкой веб-сайта Rails 2.3.1. На всем веб-сайте мне нужна форма для создания сообщений на различных страницах (домашняя страница, страница создания сообщений, страница публикации сообщений, страница с комментариями и т. Д.) - достаточно сказать, что эта форма должна находиться на многих страницах, обслуживаемых различные контроллеры). Каждая из этих страниц отображает широкий спектр другой информации, которая извлекается в соответствующем контроллере / действии. Например, на главной странице перечислены последние 10 сообщений, содержимое, извлеченное из БД и т. Д.
Итак, я переместил форму создания поста в ее собственный раздел и включил этот раздел во все необходимые страницы. Обратите внимание, что форма в разделе Частичное POST для / вопросов (которая направляет к PostsController :: create - это поведение рельсов по умолчанию).
Проблема, с которой я сталкиваюсь, заключается в том, что форма сообщений не заполнена правильно, по умолчанию метод postsController :: create создает questions / new.html.erb метода render, даже если форма была отправлена с домашней страницы (/ home /index.html.erb).
Я попытался изменить форму в частичном, чтобы отправить "submitting_controller" и "submitting_action", а в PostsController :: create, когда @ post.save? == false, я отображаю action => "../submitting_controller/submitting_action" (что немного странно, но позволяет вам отображать действия не из PostsController'а).
Это, казалось, работало нормально на поверхности. Неполная форма была отображена в представлении, которое отправило ее со всеми правильными сообщениями @ post.errors и т. Д. Проблема заключалась в том, что ВСЕ другие данные на страницах не отображались, поскольку фактические методы submiting_controller / submitting_action не были вызваны, просто связанный вид. (Помните, я сделал рендер, который сохраняет объекты экземпляра, а не redirect_to, который не сохраняет объект экземпляра @post, который имеет все сообщения об ошибках и отправленные значения.)
Насколько я вижу, у меня есть два варианта:
1) Я могу сохранить объект @post в сеансе, когда @ post.save? происходит сбой в PostsController :: create, redirect_to submitting_controller / submitting_action, после чего я вытаскиваю объект @post из сеанса и использую его для повторного заполнения формы / сообщений об ошибках. (Насколько я понимаю, хранение объектов в сеансе - ПЛОХАЯ практика в рельсах)
2) Я могу переместить всю логику, используемую для извлечения данных формы, не связанных с публикацией, из различных submitting_controller / submitting_action, поместить их в ApplicationController, создать гигантский оператор switch в PostsController :: create для submiting_controller / submitting_action и вызвать методы в ApplicationController для сбора всех дополнительных данных, необходимых для рендеринга каждой отправляющей страницы.
Мысли о том, как сделать это в Rails?