#ruby-on-rails #subdomain #ruby-on-rails-6
#ruby-on-rails #поддомен #ruby-on-rails-6
Вопрос:
В настоящее время у меня есть следующая строка в файле route.rb resources :pages, only: %i[index show create]
Двигаясь вперед, я хочу, чтобы мои пользователи получали доступ pages#show
через выделенный поддомен. Итак, я добавил следующую строку:
constraints subdomain: 'pages' do
get '/:id' => 'pages#show'
end
(Я планирую сохранить оба маршрута для ретро-совместимости)
Что позволяет пользователям получать к нему доступ через pages.mydevdomain.com/my-page-id При выполнении этого в среде разработки я получаю следующее сообщение:
To allow requests to pages.mydevdomain.com, add the following to your environment configuration:
config.hosts << "pages.mydevdomain.com"
Что я и сделал, и это работает. Однако, если я доберусь до этого, http://pages.mydevdomain.com
я увижу все созданное мной приложение, что означает, что этот поддомен предназначен не только для pages#show
того, чтобы я этого хотел.
Ответ №1:
Насколько я понимаю, это ограничение заключается в том, что вы можете получить доступ к pages#show action только через поддомен. Но вы также разрешаете доступ с помощью resources
метода. Таким образом, ограничение не имеет никакого эффекта.
Вы не ограничиваете доступ к любому другому контроллеру. Может быть, вы хотите обернуть свои маршруты следующим образом:
constraints subdomain: '' do
resources :pages, only: %i[index show create]
end
constraints subdomain: 'pages' do
get '/:id' => 'pages#show'
end
Комментарии:
1. Основная проблема заключается в том, что доступно не только
resources :pages, only: %i[index show create]
через поддомен, но и все приложение.2. Как я уже сказал. Если вы хотите ограничить доступ ко всему приложению, вам также необходимо установить ограничение вокруг этих маршрутов.