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']. Но он все еще сохраняет его. Я уже пробовал несколько условий. Что я делаю не так?

1 ответ

Несколько предложений:

Похоже, вы пытаетесь определить, когда вы работаете в стадии постановки или разработки против производства, и в этом случае вы можете просто использовать:

Rails.env.production?

Получить эту информацию. Вы также можете настроить промежуточную среду для развертывания на своем сайте dev-beta.foo.com, где вы можете просто использовать Rails.env.staging? так же.

Чтобы отладить конкретный вопрос, который вы задали, просто узнайте, какая переменная request.referer находится на запросе, который терпит неудачу в вашем тесте, затем откройте консоль и протестируйте свои логические условия по одному, а затем вместе, чтобы увидеть, какие условия выходят из строя,

Наконец, мои личные предпочтения состоят в том, чтобы увидеть логические условия, установленные на самом предшественнике, но это может быть не универсальное чувство.

EDIT Я также могу добавить, что ваше последнее условие != "3000", вероятно, ничего не делает; Я не думаю, что метод port возвращает строку...

licensed under cc by-sa 3.0 with attribution.