2013-12-12 4 views
0

У меня есть довольно стандартный Rails Haml форму нового объекта, который делает обычные вещи и заканчивается:Simulating Rails подчиненной формы в JavaScript

= 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 ";' – cantonic

+0

@cantonic. Я хотел избежать этого, так как моей странице требуется немного времени для рендеринга, поэтому делать это дважды кажется немного ненужным. –

ответ

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' был волшебством, которого я отсутствовал. –

Смежные вопросы