使用用户帐户作为子域构建设计rails应用程序当用户访问的子域不存在时,我无法弄清楚如何重定向到默认(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
答案 0 :(得分: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 ..