2017-05-01 76 views
0

我不想創建2個Rails應用程序,而是要使用路由約束來分隔這2個應用程序。如何用限制條件限制多條路線?

我有一個博客幫助部分:

class BlogHostContraint 
    def self.matches?(request) 
    request.subdomain = 'blog' 
    end 
end 

class HelpHostContraint 
    def self.matches?(request) 
    request.subdomain = 'help' 
    end 
end 

我想確保所有爲我的博客的路線是BlogConstraint匹配時才能看到,同樣的博客contraint 。

我的意思是,如果我在博客子域中,如果我在URL中添加路由,它不應呈現或與任何幫助子域路由的路由衝突。

Rails.application.routes.draw.do 
    # blog 
    get '/' => 'blog#index', constraints: BlogHostContraint 
    .. 

    # help 
    get '/' => 'help#index', constraints: HelpHostConstraint 
end 

我知道如何使用約束上,但只有一個路由或類似資源路線:

資源:用戶,限制:SomeConstraintHere

我怎麼能集團一堆路線連同一個常設,如:

BlogConstraint do 
    get '..' 
    get '...' 
    post '...' 
end 

這可能嗎?

我必須這樣做的原因之一是我希望生成好的URLs,該URL根據每個區域的博客和幫助開始。

我不想:

help.example.com/help/index help.example.com/help/page/1

我想:

help.example.com/ 
help.example.com/page/1 # help_controller#page 

和相同的博客可能是這樣的:

blog.example.com/ 
blog.example.com/page/1 # blog_controller#page 

我不想要其他建議,如果它再次h美好的網址。

回答

3

你可以將它傳遞給constraints塊:

constraints BlogConstraint do 
    get '..' 
    get '...' 
    post '...' 
end 

我也認爲你matches?實現是不正確的。那些應該返回一個布爾值,並且你正在返回一個賦值。

class BlogHostContraint 
    def self.matches?(request) 
    # Use a comparison operator instead of an assignment operator. 
    request.subdomain == 'blog' 
    end 
end