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

时间:2013-07-21 16:14:16

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

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' ]。但它仍然继续保存它。我已经尝试了几个条件。我做错了什么?

1 个答案:

答案 0 :(得分:0)

一些建议:

看起来您正在尝试确定何时在升级或开发与生产中运行,在这种情况下您只需使用:

Rails.env.production?

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

要调试您提出的具体问题,只需查看request.referer变量对您的测试失败的请求是什么,然后打开一个控制台并一次测试一个逻辑条件然后一起查看条件失败。

最后,我个人的偏好是看到过滤器本身的逻辑条件,但这可能不是普遍的情绪。

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