У меня довольно стандартная форма нового Rails HAML, которая делает обычные вещи и заканчивается:
= f.submit "Add scenario"
Это работает отлично, и scenarios_controller.rb
также прост:
def create
...create scenario...
redirect_to scenarios_path
end
Тем не менее, я также разработал форму типа мастера, для которой нужно нажать на кнопку JavaScript:
= f.submit "Add scenario", :onclick => "return validateForm()"
В моем CoffeeScript я собираю всю информацию и заканчиваю с:
$.post(
url
data
(data, textStatus, jqXHR) ->
# How do I follow the redirect?
return false
Мой url
и data
правильны, так как вышеописанный контроллер работает правильно и создает мой объект, но моя страница не перенаправляет на scenarios_path
. Я думаю, что я должен что-то делать с результатом после публикации, но при поиске в Интернете я не могу понять, что и изучать возвращаемые поля в отладчике Chrome, ничего не говорит. Единственное предложение, которое я видел, это использовать data.redirect
, но такого поля не существует, хотя jqXHR.responseText
похоже, содержит страницу, на которую я хочу перенаправить.
Я бы рассмотрел HTML-вызов для Scenario#create
а вызов JS для Scenario#create
другому, используя блок reply_to.
В файле scenarios_controller.rb
:
def create
# create your object
respond_to do |format|
format.html do
redirect_to scenarios_path
end
format.js
end
end
В views/layouts/scenarios/create.js.erb
затем поставьте что-то вроде:
window.location.replace("<%= scenarios_path %>");
Когда вы вызываете Scenario#create
с помощью JS, файл create.js.erb
получает визуализацию и перенаправляет. Когда вы вызываете Scenario#create
с помощью HTML, вызов redirect_to
происходит, как обычно.
format.js
был той магией, которой мне не хватало.
window.location.href = "http://www.example.com";