2

使用用户帐户作为子域构建设计 Rails 应用程序当用户访问的子域不存在时,我无法弄清楚如何重定向到默认 (default.domain.com) 子域。

例如:

  • user.domain.com 有效(用户存在于数据库中)
  • user2.domain.com 失败(用户不在数据库中),应重定向到 default.domain.com

如何实现?我使用下面的代码,但基于 Rails.env 的重定向进入了一个永无止境的循环:(

class ApplicationController < ActionController::Base
  protect_from_forgery

  layout "application"
  before_filter :account

  def account
    @user     = User.where(:subdomain => request.subdomain).first || not_found
  end

  def not_found
      # next 2 lines is a temp solution--- >
      raise ActionController::RoutingError.new('User Not Found')
      return

      # --- > this below fails results in endless loop
      if Rails.env == "development"
        redirect_to "http://default.domain.dev:3000"
        return
      else
        redirect_to "http://default.domain.com"
      end
    end
end
4

1 回答 1

3

不确定是否会有一种特别好的方法来做到这一点,并且在没有看到大局的情况下在这里做出正确的判断并不容易,但是,也许您应该将默认域存储为某个地方的常量,然后在重定向之前检查它,打破循环,就像它一样!

像这样的东西会更好;

class ApplicationController < ActionController::Base
  protect_from_forgery

  layout "application"
  before_filter :account

  def account
    @user = User.where(:subdomain => request.subdomain).first

    if @user.nil? and DEFAULT_URL =~ request.subdomain
      port = request.server_port == 80 ? '' : ":#{request.server_port}"
      redirect_to "http://#{DEFAULT_URL}#{port}"
    end
  end

end

你明白了,你可以在初始化程序中设置 DEFAULT_URL ..

于 2012-12-11T07:50:07.997 回答