Поместите форму formtastic в само представление.
В действии контроллера, которое обрабатывает опубликованную форму, вы можете повторно «визуализировать» представление, если запись не удалась.Когда представление будет отображено, formtastic просмотрит поле ошибок в @record и отобразит ошибки проверки.Если сохранение выполнено успешно, вы можете отобразить пустую строку, указывающую на успех.(Более сложная схема ответа возможна в зависимости от того, что вам нужно.)
def save_record
if request.xhr? # form submitted using remote => true
respond_with do |format|
format.html do
if @record.save
# record saved successfully
render :text => "" # indicate success with empty response
else # error saving record; send back form with validation errors marked
render :template => '/path/to/record_form_view', :layout => false
end
end
end
return
end
#...
end
Затем в клиентском JavaScript, когда запись не удается сохранить, вы можете заменить существующую форму отображаемым представлением.передан обратно из контроллера.
// reference: http://www.alfajango.com/blog/rails-3-remote-links-and-forms/
function setup_record_form_bindings() {
$('#record_form_id')
.bind("ajax:beforeSend", function(evt, xhr, settings){
var $submitButton = $(this).find('input[name="commit"]');
$submitButton.get(0).value = "Submitting...";
})
.bind("ajax:success", function(evt, data, status, xhr){
if (xhr.responseText === "") { // successful save
// do somethign appropriate here
} else { // error saving
$('#record_form_id').remove(); // remove old form, to replace with form in responseText
$('#record_form_parent_id').append(xhr.responseText); // should be the newly rendered form (with validation errors shown)
setup_record_form_bindings();
}
})
.bind('ajax:complete', function(evt, xhr, status){
});
}
setup_record_form_bindings();