Как я могу получить сообщения об ошибках устройства во всплывающем окне - PullRequest
4 голосов
/ 07 октября 2011

Я использую jquery для загрузки формы регистрации устройства в качестве всплывающего окна.Проблема в том, что я не могу загрузить сообщения об ошибках устройства во всплывающем окне.

Если я нажимаю на пустую форму регистрации, я перенаправляюсь на другую страницу, где я вижу сообщение об ошибке.

Я просмотрел github-сообщения devise, но не смог найти решение, которое искал.

Я создал метод в помощнике приложения, чтобы код <%= devise_error_messages! %> в формеПомощник работает правильно.

Код помощника приложения выглядит следующим образом: -

 def devise_error_messages!
   resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join   
  end

Я знаю, что с этим что-то не так, но не могу понять, что.Может кто-нибудь, пожалуйста, помогите мне с этим.

ОБНОВЛЕНИЕ

Я думаю, что так как ошибки не отображаются во всплывающем окне, когда я нажимаю кнопку отправки,может быть проблема с действием create контроллера регистрации.Попробуем переопределить действие по умолчанию для создания контроллера регистрации devise.Давайте посмотрим, работает ли это с этими изменениями.

ОБНОВЛЕНИЕ 2

Внесенные изменения, которые я упоминал в обновлении выше, хотя он не работает, он дает мне толчокЯ очень близок к решению:)

Все еще жду помощи.

Спасибо,

1 Ответ

3 голосов
/ 05 января 2012

Вы переопределяете действие создания регистрационного контроллера?Это должно сработать, если resource.save потерпит неудачу, вы можете просто

render :json => { :success => false, :data => resource.errors.full_messages } 

, который должен передать только сообщения об ошибках обратно в ваш скрипт jquery.Например:

$('#sign_up_form').submit(function() { 
    $.post(this.action, function(response) { 
        if (response.success) { 
            //... do a redirect or something cuz we're now registered 
        } else { 
            // do something with your errors 
            $('#sign_up_form').prepend(response.data); 
        } 
    }, 'json'); 
});
...