Один и тот же фрагмент в нескольких представлениях, возвращающийся к любому представлению, из которого он был вызван
-
19-08-2019 - |
Вопрос
В настоящее время я повторно использую частичное в двух разных представлениях.
Просмотреть A
Вид 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
Довольно легко переключить переменные формы, в то время как подделать сеанс может быть сложнее (но не невозможно).Я бы пошел этим путем, если бы это было мое приложение.