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