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
方法返回一个字符串...