Rails 3 - разработка перенаправлений для создания после sign_in
В приложении блога я хочу, чтобы каждый пользователь имел доступ к форме, чтобы оставить комментарий.
Когда пользователь отправляет форму комментария, он перенаправляется в форму Devise sign_in, если он не вошел в систему.
before_filter :authenticate_user!, :except => [:index, :show, :new]
Как я мог после того, как пользователь sign_in, перенаправить его в форму комментария и заполнить все поля?
заранее спасибо
2 ответа
Если вы хотите, чтобы пользователь комментировал форму после каждого входа, добавьте ApplicationController:
#after_sign_in_path_for is called by devise
def after_sign_in_path_for(resource_or_scope)
comment_path...
end
Если вы хотите вернуть пользователя на страницу, на которой он находился до входа, вы можете сохранить текущий контроллер + действие в сеансе и перенаправить обратно:
session[:pre_login_controller] = params[:controller]
session[:pre_login_action] = params[:action]
А потом:
def after_sign_in_path_for(resource_or_scope)
if session[:pre_login_controller] && session[:pre_login_action]
"#{session[:pre_login_controller]}/#{session[:pre_login_action]}"
else
some default path -- root url or comment path etc
end
end
В переполнении стека выделено несколько решений для перенаправления на предыдущий URL-адрес после входа в систему Devise.
Это, вероятно, наиболее логичное решение, и есть также решение, которое включает в себя CanCan (который я рекомендую использовать)
Rails: Warden / Devise - Как перехватить URL до входа в систему / неудачного доступа
Что касается заполнения форм, я думаю, что простыми решениями было бы в первую очередь ограничить поле для комментариев. Проверьте, вошел ли пользователь в систему (я думаю, в Devise это user_signed_in?) И если user_signed_in? еще "Вы должны link_to войти, чтобы комментировать". Если у вас есть комментарии к действию, например #new, вы можете ограничить все новое действие с помощью устройства. Для этого избавьтесь от своего: нового в аутентификации "кроме".