Rails3 URI() 如果条件不起作用


class ApplicationController < ActionController::Base
  before_filter :store_ref_url
  def store_ref_url
    rf = request.referer
    if ((URI(rf.to_s).host != "dev-beta.foo.com") && (URI(rf.to_s).host != "beta.foo.com") && URI(rf.to_s).port != "3000")
      session['referer'] = request.referer
    end
  end
end

如果域是"dev-beta.foo.com"或"beta.foo.com",或者我的本地机器中的端口是 3000,我不喜欢在我的会话中保存 request.referer['referer']。但它仍然继续保存它。我已经尝试了几个条件。我做错了什么?

一些建议:

看起来您正在尝试确定何时在暂存或开发与生产中运行,在这种情况下,您可以简单地使用:

Rails.env.production?

获取该信息。 您还可以设置要在 dev-beta.foo.com 站点上部署的过渡环境,您可以在其中以相同的方式使用Rails.env.staging?

要调试您提出的特定问题,只需找出未通过测试的请求上的 request.referer 变量是什么,然后打开控制台并一次测试一个逻辑条件,然后一起查看哪些条件失败。

最后,我个人倾向于看到之前过滤器本身的逻辑条件,但这可能不是一种普遍的情绪。

编辑我还可以补充一点,你!= "3000"最后一个条件可能什么都不做;我不认为port方法返回一个字符串...

最新更新