2016-12-26 94 views
4

我想創建一個動態路由子域和命名空間之間進行切換,這樣如何動態地在軌道路線

https://subdomain.mysite.me/admin 
https://mysite.me/subdomain/admin 

我可以把我的routessubdomain約束或namespace,但我不知道如何使它們都可用。

回答

1

你只是檢查this

設置我的Rails應用程序中使用自定義子域下面由Ryan貝茨這真棒RailsCast教程。用戶可以訪問company.lvh.me:3000並查看其所有相關信息。現在,我想在自定義子域的前面添加一個管理子域(admin.company.lvh.me:3000)。

這個想法是,我有特殊的管理員爲每個博客與特殊的控制器/意見。因此,如果將admin添加到公司子域的前面,則rails將路由到app/controllers/admin/blogs_controller.rb並顯示app/views/admin/blogs/show.html.erb。

我用管理員命名空間和一些我過去的Rails應用設置爲一個子域,但是當我嘗試在這裏我還需要第二子域是動態的:

namespace :admin, path: '/', constraints: { subdomain: 'admin.DYNAMIC' } do 
    match  '/',   to: 'blogs#show', via: 'get' 
end 

所以,如果類型admin.company在子域約束中,它的作用就像一個魅力,但如何使它動態?我沒有在路線文件中使它變成動態的('admin。'+ Subdomain等),這使我想到:我可以使用Ryan Bates的Subdomain類嗎?

namespace :admin, path: '/', constraints: { subdomain: Subdomain } do 
    match '/', to: 'blogs#show', via: 'get' 
end 

class Subdomain 
    def self.matches?(request) 
    request.subdomain.present? && request.subdomain != "www" 
    end 
end 

Relevant Routes 
Prefix Verb URI Pattern Controller#action 
admin GET /   admin/blogs#show