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, вы можете ограничить все новое действие с помощью устройства. Для этого избавьтесь от своего: нового в аутентификации "кроме".

Другие вопросы по тегам