2014-02-04 7 views
1

Мы пытаемся направить нового пользователя, чтобы заполнить информационный бюллетень при первом входе в систему, а затем останемся на своей панели мониторинга в остальное время.Devise Redirect First Login

Идя на этот пост здесь: devise first login with rails

Мы добавили это к нашему контроллеру приложения:

def 
after_sign_in_path_for(user) 
redirect_to ((current_user.sign_in_count == 0) ? new_fact_sheet_path : dashboard_index_path) 
end 

Но мы получаем эту ошибку:

«AbstractController :: DoubleRenderError в Devise :: RegistrationsController # create Рендеринг и/или переадресация вызывались несколько раз в этом действии. Обратите внимание, что вы можете только вызывать рендеринг или перенаправление и не более одного раза за действие. поэтому обратите внимание, что ни перенаправление, ни рендер не прекращают выполнение действия, поэтому, если вы хотите выйти из действия после перенаправления, вам нужно сделать что-то вроде «redirect_to (...) и return».

Мы думали, что мы переопределяем стандартную маршрутизацию Devise с перенаправлением в контроллере приложения?

Решение: Это оказалось двухкомпонентным решением, как указано в комментариях ниже. Код, который работал:

def 
after_sign_in_path_for(user) 
((current_user.sign_in_count == 1) ? new_fact_sheet_path : dashboard_index_path) 
end 

ответ

2

Я думаю, что причина для вашего DoubleRenderError заключается в том, что after_sign_in_path_for(resource_or_scope) должен просто вернуть путь, который позже используется для перенаправления с помощью разработки. Тем не менее, вы вызываете redirect_to в свой переопределенный after_sign_in_path_for(), поэтому он перенаправляется дважды. Просто опустите redirect_to и просто верните соответствующий путь.

+0

Спасибо! Это в сочетании с информацией из нижеприведенного ответа сделало трюк. Удаление redirect_to избавилось от нашей ошибки, но не привело нас к правильной странице. Мы сделали корректировку, как указано ниже, чтобы получить правильное поведение из Devise. – Sandy

0

Я думаю, что это должно быть на DeviseSessionController, прочитать: Devise After first login redirect

люди использовали то же самое, и это работает.

+1

Спасибо! Это привело нас ко второму вопросу, как только мы решили нашу ошибку, нам нужно было изменить sign_in_count == 1. – Sandy