Rails: как избежать этого цикла перенаправления? - PullRequest
1 голос
/ 28 апреля 2011

Я бы хотел заставить пользователя изменить свой пароль при входе в систему (при условии, что для него установлен определенный логический маркер, равный true).

Сейчас я пытаюсь сделать это через before_filter с именем 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 Ответ

5 голосов
/ 28 апреля 2011
before_filter :change_password_check, :except => :change_password

Вы можете указать только и кроме как параметры для before_filter.Они принимают массив аргументов, в приведенном выше случае у вас есть только один метод, который вы хотите пропустить, однако, если у вас был другой метод, который должен был быть пропущен (ваше действие обновления), вы можете сделать:

before_filter :change_password_check, :except => [:change_password, :update]

Только противоположно исключению, поэтому:

before_filter :change_password_check, :only => :check_me

Запускается, только если метод check_me.

...