强制子域和删除子域

时间:2011-04-18 23:44:35

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

我正在编写一个将使用basecamp样式子域(See post)的应用。

应用程序的某些部分应始终位于子域,部分应永远不会位于子域。例如,“主页”页面永远不应位于子域中,但博客和帖子资源应该始终存在。请注意,我不知道子域名,因为每个帐户都有一个。

我设置了这样的路线(例子)。它运行良好,因为它匹配路线,但我很难强迫我的应用程序链接到正确的位置。

MyApp::Application.routes.draw do

  # these should all route to mysubdomain.myapp.com
  # Clicking on a post from myapp.com/categories/12 should take you to mysubdomain.myapp.com/posts/14
  constraints(Subdomain) do
    resources :blogs { resources :posts }
  end

  # these should all route to myapp.com (clicking on one of these links from mysubdomain.myapp.com should go to myapp.com/categories/12)
  constraints(NoSubDomain) do
    resources :categories
  end

end

问题是,一旦我在子域中,所有到其他页面(类别等)的链接都包含子域。我不确定最好解决这个问题。非常感谢你的帮助。

3 个答案:

答案 0 :(得分:7)

看起来可以通过覆盖url_for方法来包含:subdomain选项。

请参阅RailsCasts#221的清理代码以更改子域部分。

Railscasts:http://railscasts.com/episodes/221-subdomains-in-rails-3

ASCIIcasts:http://asciicasts.com/episodes/221-subdomains-in-rails-3

然后你可以这样做:

<p><%= link_to "All Blogs", root_url(:subdomain => false) %></p>  

答案 1 :(得分:0)

我认为您的问题的关键是您需要使用resource_name_url而不是resource_name_path。

路径仅为您提供相对网址(/ accounts)与网址,返回完整路径(www.example.com/accounts)。

希望有所帮助,

安德鲁

答案 2 :(得分:0)

可能有更好的方法可以做到这一点,我想知道是否有,但我开始为此做的是在我的配置中设置基本域名(不是Rails conf,而是我自己的应用程序配置),然后覆盖root_url帮助程序以始终转到基本域名。显然,你可以为该方法使用另一个名称,但我从不使用base_url用于其他任何名称,所以我保留了Rails-esque命名。