Rails 3.1基于子域从不同路径加载控制器

是否可以动态更改使用控制器的路径? Ryan Bates在这里展示了如何更改view_paths: http ://railscasts.com/episodes/269-template-inheritance

我正在创建一个CMS,用户可以在其中创建一个站点并输入自己的子域。 如果没有子域名,我希望“/”指向“public#welcome”,但如果有子域名,我希望它指向“sites / public#welcome”。

我正在使用Rails 3.1,如果这有任何区别。

你应该能够使用约束来解决这种情况,如果我没有弄错的话(我可能,因为我还没有真正尝试过以下):

constraints(:subdomain => /.+/) do root :to => 'sites/public#welcome' end root :to => 'public#welcome' 

我想到了:

  constraints(:subdomain => /.+/) do scope :module => "sites" do root :to => 'public#welcome' end end root :to => 'public#welcome' 

现在,当用户访问“/”时,如果存在子域,则将使用Sites :: PublicController,但如果没有子域退出,则只使用PublicController。 添加scope :module => "sites" do...end使我的路由文件简单易懂。