В моем приложении я храню идентификатор пользователя в сеансе [].В начале каждого действия контроллера я вызываю метод, определенный в ApplicationController с именем current_user:
def current_user
@current_user ||= session[:current_user_id] &&
User.find_by_id(session[:current_user_id])
end
В начале методов моих контроллеров у меня есть следующее:
@current_user = current_user
if @current_user == nil
redirect_to :home
return
end
Это явно повторяющийся код, и он должен быть где-то методом.Я прочитал ответ на этот вопрос и попытался поместить мой метод в родительский класс, из которого теперь происходят классы моего контроллера, однако кажется, что я не могу перенаправить из этого метода сейчас.
В моем родительском классе у меня есть:
def verify_user
user = current_user
if user == nil
redirect_to "/"
return
end
return user
end
И теперь я изменил свои методы контроллера следующим образом:
@current_user = verify_user
Это не работает, и я думаю, что знаюЗачем.Во-первых, я не могу просто вызвать return в моем методе verify_user, поскольку он, очевидно, просто вернется к контроллеру.Перенаправление, похоже, не оказывает никакого влияния, вероятно, потому, что format.html вызывается после вызова перенаправления, что и стало причиной возврата в исходном коде.
Итак, что я делаю здесь неправильно?и какое предложение вы должны решить?Это неправильный подход?Моя главная цель - сохранить всю «проверку, если пользователь вошел в систему, иначе перенаправить» на одну строку кода для каждого метода контроллера.