如何将完整域映射到基于子域的Rails应用程序帐户?

aar*_*ell 5 ruby subdomain routing ruby-on-rails

我正在开发一个Rails应用程序,默认情况下会将用户帐户设置为他们选择的子域.作为一种选择,他们可以将自己的完整域名映射到他们的帐户.

到目前为止,这就是我设置的方式.我正在使用subdomain-fu来为路由提供支持:

# routes.rb
map.with_options :conditions => {:subdomain => true} do |app|
  app.resources # User's application routes are all mapped here
end

map.with_options :conditions => {:subdomain => false} do |www|
  www.resources # Public-facing sales website routes are mapped here
end
Run Code Online (Sandbox Code Playgroud)

除此之外,我使用此处描述方法通过子域或完整域来访问帐户:

before_filter :set_current_account

def set_current_account
  if request.host.ends_with? current_domain
    # via subdomain
    @current_club = Club.find_by_subdomain(current_subdomain)
  else
    # via full domain
    @current_club = Club.find_by_mapped_domain(request.host)
  end
end
Run Code Online (Sandbox Code Playgroud)

我还没有完成构建它的过程,但我已经看到我将遇到路由问题.如果request.host是一些random.com域,那么subdomain-fu不会路由相应的路由?

我假设这不是一个不寻常的问题,所以任何人都可以分享他们如何处理这个问题,或者我如何配置我的路线来做我需要的东西?

Gar*_*ett 2

我遇到了这个问题,试图在一个应用程序中做太多事情。你将开始在非常奇怪的地方做你不应该做的条件。我决定让 2 个独立的 Rails 应用程序具有指向用户应用程序的通配符域,然后具有www.domain.comdomain.com指向面向公众的一面。我知道这并不能直接“回答”你的问题。

如果您将其添加到该方法的顶部,我可以帮助您修复那里的小代码气味:

return @current_club if defined?(@current_club)
Run Code Online (Sandbox Code Playgroud)

它不会在您每次尝试访问时进行查询@current_club,它会返回您已经返回的结果。