我正在编写一个将使用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
问题是,一旦我在子域中,所有到其他页面(类别等)的链接都包含子域。我不确定最好解决这个问题。非常感谢你的帮助。
答案 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命名。