Rails路由通过数据库将子域映射到路径

时间:2014-06-03 18:54:28

标签: ruby-on-rails ruby-on-rails-3 routing subdomain

一个非常简单的问题,我无法弄清楚如何处理(在Rails 3.2中):我们想提供的可能性 我们的用户定义子域并使用该子域将传入请求映射到部分检索的路径 数据库。例如,虽然www.example.com将转到我们通常的根路径,但请求steve.example.com 首先要查看"史蒂夫"在一个数据库表中,它将子域与id关联,如果找到匹配的路由 请求www.example.com/folders/36(其中36是与" steve&#34相关联的ID)的请求,如果找不到匹配项 继续寻找routes.rb。

中的其他路线

我有一个使用重定向的工作解决方案,类似于:

constraints :subdomain => /^(?!www).+/ do # a subdomain is used and different from www
  match '*path', :to  => redirect {|params, req|
    req_protocol=req.env['rack.url_scheme'] # e.g. "http"
    req_host=req.env['HTTP_HOST'] # e.g. "steve.example.local:3000"
    ...
    code to pick up "steve", do the lookup and return a suitable URL
   }
end

现在,我不想使用重定向有两个原因:首先在用户的浏览器地址栏中修改URL, 其次,浏览器倾向于缓存重定向(即使状态设置为302或307),使得这种解决方案不那么动态。

如果我有权访问routes.rb中的请求对象,我可能已经完成了类似

的操作
match '*path' => "folders##{index}", :constraints => {:subdomain => /^(?!www).+/ }

使用子域从数据库表中检索索引后,但请求对象不可用。 (但是,如果使用" Advanced Contstraints"没有找到任何关联,我可以管理这个案例。 Rails指南,虽然我还没有测试过,知道它只会解决问题的一小部分。)

0 个答案:

没有答案
相关问题