1

У меня есть приложение Rails 4, которое я пытаюсь перенастроить для использования поддоменов для jobportals. Прямо сейчас корневой путь для каждого портала равен /jobportals/:id. Я хочу, чтобы пользователь мог перейти на client.example.com и нажать на этот корневой путь. Затем, например, если пользователь редактирует свой профиль, то URL будет client.example.com/user/edit, а не www.example.com/jobportals/:id/user/edit.Rails Субдомен для вложенных ресурсов

Я следовал this ASCIIcasts tutorial о настройке маршрутизации поддоменов, но это не работает для меня. Когда я перехожу на http://client.lvh.me:3000/, я нажимаю root_path моего приложения Rails, а не root_path для портала.

Я думаю, проблема в том, что Constraints(Subdomain) не работает с resources :jobportals. Как я могу перенастроить свои маршруты для выполнения того, что мне нужно?

MyApp::Application.routes.draw do 
    devise_for :users, :controllers => {:registrations => "registrations"} 
    root 'general#home' 

    get '/about' => 'general#about' 
    get '/team' => 'general#team' 
    get '/careers' => 'general#careers' 
    get '/terms' => 'general#terms' 
    get '/privacy_policy' => 'general#privacy_policy' 

    constraints(Subdomain) do 
     resources :jobportals, controller: 'portals/general' do 
      member do 
       root 'portals/general#home' 
       devise_scope :user do 
        get '/user/sign_in' => 'portals/sessions#new' 
        post '/user/sign_in' => 'portals/sessions#create' 
        delete '/user/sign_out' => 'portals/sessions#destroy' 
        post '/user/password' => 'portals/passwords#create' 
        get '/user/password/new' => 'portals/passwords#new' 
        get '/user/password/edit' => 'portals/passwords#edit' 
        patch '/user/password' => 'portals/passwords#update' 
        put '/user/password' => 'portals/passwords#update' 

        post '/user' => 'portals/registrations#create' 
        get '/user/sign_up' => 'portals/registrations#new' 
        get '/user/edit' => 'portals/registrations#edit' 
        patch '/user' => 'portals/registrations#update' 
        put '/user' => 'portals/registrations#update' 
        delete '/user' => 'portals/registrations#destroy' 
       end 

       get '/jobs' => 'portals/general#jobs' 
       get '/companies' => 'portals/general#companies' 
       get '/alljobs' => 'portals/general#alljobs' 

       resources :applications, controller: 'portals/applications' 

       get ':id' => 'portals/companies#profile' 
       get ':id/jobs' => 'portals/companies#jobs' 
       get ':id/jobfunctions' => 'portals/companies#jobfunctions' 
      end 
     end 
    end 
end 

Рабочий код Ниже

MyApp::Application.routes.draw do 
    devise_for :users, :controllers => {:registrations => "registrations"} 
    root 'general#home' 

    get '/about' => 'general#about' 
    get '/team' => 'general#team' 
    get '/careers' => 'general#careers' 
    get '/terms' => 'general#terms' 
    get '/privacy_policy' => 'general#privacy_policy' 

    constraints(Subdomain) do 
     get '/' => 'portals/general#home' 
     devise_scope :user do 
      get '/user/sign_in' => 'portals/sessions#new' 
      post '/user/sign_in' => 'portals/sessions#create' 
      delete '/user/sign_out' => 'portals/sessions#destroy' 
      post '/user/password' => 'portals/passwords#create' 
      get '/user/password/new' => 'portals/passwords#new' 
      get '/user/password/edit' => 'portals/passwords#edit' 
      patch '/user/password' => 'portals/passwords#update' 
      put '/user/password' => 'portals/passwords#update' 

      post '/user' => 'portals/registrations#create' 
      get '/user/sign_up' => 'portals/registrations#new' 
      get '/user/edit' => 'portals/registrations#edit' 
      patch '/user' => 'portals/registrations#update' 
      put '/user' => 'portals/registrations#update' 
      delete '/user' => 'portals/registrations#destroy' 
     end 

     get '/jobs' => 'portals/general#jobs' 
     get '/companies' => 'portals/general#companies' 
     get '/alljobs' => 'portals/general#alljobs' 

     resources :applications, controller: 'portals/applications' 

     get ':id' => 'portals/companies#profile' 
     get ':id/jobs' => 'portals/companies#jobs' 
     get ':id/jobfunctions' => 'portals/companies#jobfunctions' 
    end 
end 

ответ

0

Это выглядит как ограничения не определяют должным образом, это что-то вроде get 'jobportals', constraints: {subdomain: 'subdomain_name'} Checkout the rails guide

+0

Оказывается, что мне нужно, чтобы избавиться от моего 'resources:: rowsportals' и' member do'. Затем я переместил блок 'Constraints (Subdomain)' в верхнюю часть моего файла маршрутов, что было ключевым. Если я держу его в нижней части, все запросы '/' перехватываются с помощью 'root_path', даже если есть поддомен. Если я перемещаю 'root_path' и все остальные маршруты ниже моего блока' Constraints (Subdomain) ', root_path' по-прежнему работает для основного приложения, но запросы на'/'и все остальные маршруты для субдоменов работают правильно. Я обновил свой вопрос с помощью структуры рабочего маршрута. – ACIDSTEALTH

+0

Я также проверил ваш ответ, и он не работал, потому что вам нужно указать контроллер для действия 'get', и я уверен, что вы не можете называть' get 'some_resource''. Я уверен, что это должно быть 'get '/ some_route'. – ACIDSTEALTH