2011-06-03 12 views
1

我已經編寫了一個應用程序,它使用每個用戶賬戶的子域來隔離環境。所有這些工作正常,除了我有一個問題。我無法同時獲得www和「」具有不同於其他所有子域的根路徑。Rails 3 - 移動到Heroku的子域問題

對於所有帳戶子域,我有一個根頁:

root :to => "applications#index" 

我需要這是根頁除的「空白子域」,然後「www」的所有子域。對於WWW,我有這樣的路線:

constraints(:subdomain => "www") do 
    root :to => "promos#index" 
    end 

我有,是得到了如此「艱難什麼」也將採用茂德#指數爲根路徑。當它不是根路徑時,mywebsite.com將它們發送到應用程序#索引,該索引需要登錄。我不希望用戶在第一次訪問時看到的東西。

無論如何修改此代碼還包括mywebsite.com有不同的根?我嘗試過使用「」複製代碼的東西,但這往往會擾亂所有其他子域,無論順序如何。以下是我的路線文件:

constraints(:subdomain => "www") do 
    root :to => "promos#index" 
    end 

    root :to => "applications#index" 

回答

3

您可以使用實現「匹配?」的對象。做一些真正的自定義的東西。下面,我們將設置應用#指數如果你是一個客戶的子域,送你去推廣#指數如果你不是

在你的路線:

Yourapp::Application.routes.draw do 
    constraints(SubDomain) do 
    root :to => "applications#index" 
    end 
    root :to => "promo#index" 
    ... 
end 

,然後將子域匹配文件:

配置/初始化/ subdomain.rb

class SubDomain 
    def self.matches?(request) 
    case request.subdomain 
    when 'www', '', nil, #admin/api/etc could also go here 
     false 
    else 
     true 
    end 
    end 
end 

subdomain.rb也可以住在LIB(如果它被自動加載)

+1

這是非常優雅,工作就像一個絕對的魅力。如果我能擁抱並親吻你,我會:P - 非常感謝,非常感謝。 – Kombo 2011-06-03 17:54:50

+0

nicest.compliment/thanks.ever! – 2011-06-03 18:07:09