Форма Simulation Rails отправьте в JavaScript

0

У меня довольно стандартная форма нового 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 похоже, содержит страницу, на которую я хочу перенаправить.

  • 0
    Вы можете перенаправить, используя JavaScript с window.location.href = "http://www.example.com";
  • 0
    @cantonic Я хотел избежать этого, так как моя страница рендеринга занимает немного времени, поэтому повторять ее дважды - пустая трата времени.

1 ответ

2
Лучший ответ

Я бы рассмотрел 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 происходит, как обычно.

  • 0
    Отлично, это решает проблему - format.js был той магией, которой мне не хватало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню