2012-06-19 23 views
1

Devise ведет себя странно. Он показывает красные или сообщения об ошибках, но не показывает зеленые или успешные сообщения.Уклонение не отображается сообщение об успешном завершении

Это произошло после того, как я внесла изменения в маршрутизатор и контроллер для перенаправления на страницу входа или домашнюю страницу в зависимости от того, был ли пользователь подписан или нет.

Так routes.rb теперь:

devise_for :users 

root :to => "questions#redirect_on_visit" 

match 'home', :to => "questions#index" 

и контроллер:

before_filter :authenticate_user!, :except => [:redirect_on_visit] 

def redirect_on_visit 
    if user_signed_in?  
    redirect_to home_path  
    else  
    redirect_to new_user_session_path  
    end 
end 

Также измененное контроллер приложения для перенаправления на соответствующие страницы после регистрации заезда/отъезда подписать:

protected 

def after_sign_in_path_for(resource)  
    stored_location_for(:user) || root_path  
end 

private 

def after_sign_out_path_for(resource) 
    stored_location_for(:user) || root_path  
end 
+1

Что вы видите на своем флеш-объекте при входе в систему или выходе из системы? Я думаю, что придумывать эту информацию нужно как 'flash [: notice]', а не как 'flash [: success]' – Viren

+0

Да! Это, конечно, 'flash [: notice]'. По сообщениям с успехом я имею в виду сообщения, которые говорят, что вы вошли в систему или успешно вышли из нее. Придумайте их зеленым фоном. – Humming

+0

Я уверен в цвете фона, но если ваша проблема связана с флеш-сообщением, проверьте 'devise.yml' (в каталоге' config/locales') файл даст вам больше информации об этом – Viren

ответ

3

Я был очень онемели. Тот факт, что у меня есть root :to => "questions#redirect_on_visit", будет перенаправлять каждый раз, когда пользователь посещает, подписывает или выписывает. Перенаправление явно смывало флеш-сообщения.

Наконец-то я нашел решение, которое искал. Он должен сохранять флэш-сообщения flash.keep(:notice), как указано here.

0

Ваша проблема в множественном перенаправлении от login => root => h Ома как флэш-объект имеет жизнь оставить только для одного запроса

Я думаю, было бы лучше писать redirect_on_visit маршрутизации в after_sign_in_path_for и after_sign_out_path_for

что-то вроде этого

def after_sign_in_path_for(resource)  
    stored_location_for(:user) || home_path  
end 

private 

def after_sign_out_path_for(resource) 
    stored_location_for(:user) || new_user_session_path 
end 
+0

Нет, у вас все получилось. «Redirect_on_visit» работает до того, как пользователь выполнил вход, в то время как эти два метода работают ПОСЛЕ того, как пользователь имеет вход или выйдет из системы. – Humming

+1

@ Humming Возможно, вы не поняли, что я имел в виду, что проблема заключается в том, что при создании аутентификации пользователя он перенаправляет пользователя на «root_path» в вашем случае, это «вопросы # redirect_on_visit», когда перенаправление происходит с корневым_пуском до тех пор, пока не появится флэш-сообщение, но так как ваш чек для входа в систему пользователя с использованием 'user_signed_in?' в 'redirect_on_visit', а затем перенаправляет его обратно на страницу' home', ваше флеш-сообщение будет потеряно, сделайте себе одолжение и добавьте 'отладчик' в' if statement' 'redirect_on_visit 'и проанализируйте' flash-контент', вы увидите там сообщение об ошибке, поскольку вы перенаправляете – Viren

+1

@ Наведите его на исходный_файл, чтобы ваше флеш-сообщение было потеряно в этом переходе bcoz, как я уже сказал, поскольку флэш-сообщение только преобладает для одного запроса – Viren