Ruby on Rails:子域太强大了?我该如何以正确的方式设置它

时间:2010-11-29 17:19:00

标签: ruby-on-rails subdomain

路线:

  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 /它进入site_admin / admin #index ...这很棒...... 但是当我取下子域名时,只需要lvh.me:3000 /它就会走同一条路线....

如何让管理员留在原地。没有子域可以进入我的根页面,就像我的路径文件一样?

3 个答案:

答案 0 :(得分:0)

根本不确定子域如何影响到这一点。也许你将子域名与路由命名空间混淆(http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing)?

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

正在选择

root :to => 'info#home'

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

答案 1 :(得分:0)

路由按顺序解析,因此当您从任何域请求/首先找到“匹配”/“...”并将您发送到指定页面。您的子域根本不会发挥作用。您可以使用基于请求的约束来基于子域进行路由:

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

答案 2 :(得分:0)

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

match '/admin' => 'site_admin/admin#index'
那么它确实有意义......说什么?

或者,使用以下代码,您可以有条件地确定您的网址:

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

然后从使用子域的操作开始,您可以决定将其重定向到管理面板或主页...