#ruby-on-rails #redirect #routes
#ruby-on-rails #перенаправление #маршруты
Вопрос:
Я хотел бы заставить пользователя изменить свой пароль при входе в систему (при условии, что для определенного логического маркера установлено значение true).
Прямо сейчас я пытаюсь сделать это с помощью before_filter
called change_password_check
, который находится в ApplicationController
.
def change_password_check
if current_user.change_password == true
flash[:notice] = "You must be update your password before continuing"
redirect_to change_password_path
return false
end
end
Проблема, очевидно, в том, что я получаю цикл перенаправления.
Итак, как я могу это сделать, только before_filter
если пользователь НЕ находится на change_password_check
маршруте (или отправке в user#update
)?
Я использую Rails 3.
Ответ №1:
before_filter :change_password_check, :except => :change_password
Вы можете указать only и except в качестве опций для before_filter . Они принимают массив аргументов, в приведенном выше случае у вас есть только один метод, который вы хотите пропустить, однако, если у вас был другой метод, который должен был быть пропущен (ваше действие обновления), вы можете сделать:
before_filter :change_password_check, :except => [:change_password, :update]
Only является противоположностью except, поэтому:
before_filter :change_password_check, :only => :check_me
Будет выполняться только в том случае, если методом является check_me.
Комментарии:
1. Не знаю, почему я думал
except
иonly
не сработало вApplicationController
… кажется, они это делают. 🙂 Спасибо!