2011-04-18 95 views
5

我正在編寫一個應用程序,它將使用大本營風格子域名(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 

問題是,一旦我在子域中,所有到其他頁面(類別等)的鏈接都包含子域。我不確定最好解決這個問題。非常感謝你的幫助。

回答

6

看起來可以通過覆蓋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> 
+0

我喜歡這個建議,而且我之前在網上看到過,但是,我需要做兩件事之一 - 覆蓋並將默認設置爲false,然後在所有鏈接中傳遞子域,反之亦然。我希望Rails能夠從我的路由文件中得到一個提示,畢竟這就是它的存在...... – 2011-04-19 04:26:59

+0

我知道它基本上可以正常工作,但是您希望確保特定的路徑,如「家」沒有一個子域。我以爲你可以在這些鏈接上使用這個覆蓋(:subdomain => false),並保持原樣。 (如果您沒有通過:子域作爲選項,現有功能保持不變。) – talyric 2011-04-19 14:50:07

+0

thx!正是我正在尋找:) – Rubytastic 2012-09-15 17:46:33

0

我覺得關鍵是你的問題是,你需要使用resource_name_url而不是resource_name_path。

路徑只給你一個相對URL(/ accounts)vs url,它返回完整路徑(www.example.com/accounts)。

希望幫助,

安德魯

+0

剛剛嘗試過。這個問題,除非我感到困惑,否則你不能設置原始網址,這樣做不會太大。 – 2011-04-19 04:25:41

0

有可能是這樣做的更好的辦法了,我很想知道,如果有,但我已經開始做了,這是設置我的配置中的基本域名(不是Rails conf,但是我自己的應用程序配置),然後重寫root_url幫助程序始終轉到基本域名。顯然,你可以爲該方法使用另一個名稱,但是我從不使用base_url作爲其他任何事情,所以我保留了Rails式的命名。