3

如果条件为真,我想重定向用户:

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,则永远不会调用该操作。

4

3 回答 3

4

除了杰德的回答

需要比较运算符,而不是赋值运算符:

 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
于 2011-07-01T21:14:39.877 回答
1

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

查看“重定向”文档

于 2011-07-01T19:32:55.337 回答
0

需要比较运算符,而不是赋值运算符:

redirect_to :root if @offline == 'true'

如果您遇到更多困难,请使用以下方法简化测试:

redirect_to(:root) if @offline == 'true'

或者它应该是一个真正的布尔值而不是一个字符串?

redirect_to :root if @offline
于 2011-07-01T19:19:08.510 回答