Rails 3 - разработка перенаправлений для создания после sign_in - PullRequest
2 голосов
/ 18 апреля 2011

В приложении блога я хочу, чтобы каждый пользователь имел доступ к форме, чтобы оставить комментарий.

Когда пользователь отправляет форму комментария, он перенаправляется в форму Devise sign_in, если он не вошел в систему.

before_filter :authenticate_user!, :except => [:index, :show, :new]

Как я могу после того, как пользователь sign_in перенаправить его на форму комментария и заполнить все поля?

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 18 апреля 2011

Если вы хотите, чтобы пользователь комментировал форму после каждого входа, добавьте 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
2 голосов
/ 18 апреля 2011

В переполнении стека выделено несколько решений для перенаправления на предыдущий URL после входа в систему Devise.

Это, пожалуй, наиболее логичное решение, и есть также решение, которое включает в себя CanCan (который я рекомендую использовать)

Rails: Warden / Devise - Как захватить URL довход / неудачный доступ

Что касается заполнения форм, я думаю, что простыми решениями было бы в первую очередь ограничить поле для комментариев.Проверьте, вошел ли пользователь в систему (я думаю, в Devise это user_signed_in?) И если user_signed_in?еще "Вы должны link_to войти, чтобы комментировать".Если у вас есть комментарии к действию, например #new, вы можете ограничить все новое действие с помощью устройства.Для этого избавьтесь от своего: нового в аутентификации «кроме».

...