Rails: Как избежать этого цикла перенаправления?

#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 … кажется, они это делают. 🙂 Спасибо!