Rails: перенаправление на страницу, если условие
Я хочу перенаправить пользователя, если условие истинно:
class ApplicationController < ActionController::Base
@offline = 'true'
redirect_to :root if @offline = 'true'
protect_from_forgery
end
Редактировать Это то, что я пытаюсь сейчас безуспешно. Контроллер по умолчанию не является контроллером приложений.
class ApplicationController < ActionController::Base
before_filter :require_online
def countdown
end
private
def require_online
redirect_to :countdown
end
end
Это дает ошибку браузера Too many redirects occurred trying to open “http://localhost:3000/countdown”. This might occur if you open a page that is redirected to open another page which then is redirected to open the original page.
Если я добавлю && return
действие никогда не вызывается.
3 ответа
В дополнение к ответу Джеда
Нужен оператор сравнения, а не оператор присваивания:
redirect_to :root if @offline == 'true'
Если у вас возникли дополнительные трудности, упростите тесты с помощью:
redirect_to(:root) if @offline == 'true'
Или, может быть, он должен быть истинным логическим значением, а не строкой?
redirect_to :root if @offline
class ApplicationController < ActionController::Base
before_filter :require_online
private
def require_online
redirect_to(:root) && return if @offline == 'true'
end
end
Redirect_to должен быть вызван из действия.
В качестве примера,
class ApplicationController < ActionController::Base
protect_from_forgery
def index
@offline = 'true'
// Once you do the redirect make sure you return to avoid a double render error.
redirect_to :root && return if @offline == 'true' // Jed was right use a comparison
end
end
Взгляните на документы "Перенаправить"
Нужен оператор сравнения, а не оператор присваивания:
redirect_to :root if @offline == 'true'
Если у вас возникли дополнительные трудности, упростите тесты с помощью:
redirect_to(:root) if @offline == 'true'
Или, может быть, он должен быть истинным логическим значением, а не строкой?
redirect_to :root if @offline