В настоящее время я повторно использую партиал в двух разных представлениях.
View A
View B
Партиал принадлежит модели A, но связан с моделью B, поэтому он применим и к модели B.
Он содержит форму, и при отправке данных он всегда перенаправляет пользователя в представление A. Однако, когда я отправляю форму из представления B, я хотел бы, чтобы меня перенаправили обратно в представление B вместо формы A.
Причина, по которой он перенаправляется прямо сейчас на представление A, заключается в том, что это модель, которой принадлежит эта форма. Таким образом, при публикации он обращается к контроллеру A и использует перенаправление для перехода пользователя на a_url.
Как я могу сказать моей форме (или более того, действию контроллера) перенаправить пользователя туда, откуда он пришел?
Спасибо!





Решено.
Я добавил скрытое поле в свою форму, которое содержало имя контроллера, в котором был отрисован партиал, а затем мой блок response_to определил, куда отправить пользователя.
Посмотреть код:
<%= hidden_field_tag 'submitted_from', "#{controller.controller_name}" %>
Мой код контроллера:
if params[:submitted_from] == 'A'
redirect_to a_url
else
redirect_to b_url
end
Вместо использования скрытого тега вы можете разместить это в сеансе:
session[:submitted_from] = new_model_url
а в другом действии ..
redirect_to(session[:submitted_from])
session[:submitted_from] = nil
Отключить переменные формы довольно легко, тогда как создать сеанс может быть сложнее (но не невозможно). Я бы пошел по этому пути, если бы это было мое приложение.