0
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 保存在我的 session['referer'] 中。但它仍然继续保存它。我已经尝试了几个条件。我究竟做错了什么?

4

1 回答 1

0

几个建议:

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

Rails.env.production?

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

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

最后,我个人的偏好是查看前置过滤器本身的逻辑条件,但这可能不是一个普遍的观点。

编辑 我还可以补充一点,您的最后一个条件!= "3000"可能没有做任何事情;我不认为该port方法返回一个字符串......

于 2013-07-21T16:24:55.880 回答