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
Другие вопросы по тегам