2016-12-26 66 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