代码之家  ›  专栏  ›  技术社区  ›  NullVoxPopuli

RubyonRails:子域太强大了?我怎么把这个安排好呢

  •  1
  • NullVoxPopuli  · 技术社区  · 15 年前

    路线:

      match '/' => 'site_admin/admin#index'
    
    
      resources :link_pages
      resources :services  
      resource :user_session
      resource :account, :controller => "users"
      resources :password_resets
      resources :users
      resources :addresses
      resources :info
    
      match "/home", :to => 'info#home'
      match "/register", :to => 'users#new'
    
      root :to => 'info#home'
    
    
      match ':controller(/:action(/:id(.:format)))'
    

    所以当我访问admin.lvh.me:3000/它会转到站点“admin/admin”索引…很好… 但是当我离开子域,只得到了lvh.me:3000/它走同一条路….

    我怎样才能让管理员呆在原地呢?没有子域可以转到我的根页面,就像在我的路由文件中一样?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Mike Yockey    15 年前

    路由是按顺序解析的,因此当您请求/来自任何域时,它首先找到“匹配”/“…”,然后将您发送到指定的页面。你的子域根本不起作用。可以使用基于请求的约束基于子域路由:

    http://guides.rubyonrails.org/routing.html#request-based-constraints

        2
  •  0
  •   Cory    15 年前

    不知道子域是如何影响这一点的。也许你把子域和路由名称空间混淆了(http://edgeguides.rubyonrails.org/routing.html控制器名称空间和路由)?

    match '/' => 'site_admin/admin#index'
    

    正在被选中

    root :to => 'info#home'
    

    因为它是在路由文件中首先定义的。他们表面上是一样的。

        3
  •  0
  •   Nimesh Nikum    15 年前

    是的,@cory是对的。以上两个语句都是相似的,并且每次都考虑第一个定义的路由。如果将管理路由更改为

    match '/admin' => 'site_admin/admin#index'
    
    那就有意义了…怎么说??

    或者,使用以下代码可以有条件地确定URL:

    request.subdomains(0).first
    将为您提供子域值-admin或blank。但它只会转到route.rb文件中首先定义的任何一个控制器操作。

    然后,从使用子域的操作中,您可以决定将其重新定向到何处-要么指向管理面板,要么指向主页…