Как иметь разные URL для каждого экземпляра модели в приложении rails - PullRequest
0 голосов
/ 17 сентября 2018

Мне было любопытно, как мы можем создать разные URL для каждого экземпляра модели.

например,

Если у меня есть модель Школа , с которой связано много моделей, таких как факультеты, классы, студенты и т. Д. Теперь я хочу, чтобы каждый раз, когда пользователь регистрировал новую школу, он должен иметь свой собственный URL. [ Новая школьная форма запрашивает у пользователя URL и название школы ]

, например

www.school1.com / классы / 1

ИЛИ

www.school2.com / студенты / 2

1 Ответ

0 голосов
/ 17 сентября 2018

Создание пользовательских доменов будет немного сложным, так как вам придется управлять доменами и DNS вручную. Однако это возможно. Вы должны настроить несколько доменов и указать их все для своего приложения Затем в вашем контроллере вы проверите, какая школа соответствует request.host.

Более простым решением является настройка каждой школы с поддоменом. Это не потребует пользовательской настройки и очень хорошо описано в этой статье: https://mythoughts.io/managing-dynamic-domains-with-rails-b6ab1040dc8c.

Надеюсь, это поможет ответить на ваш вопрос,

Ben


Обновление для предоставления конкретных деталей реализации:

На вашем объекте School я бы добавил атрибут domain типа string. Это должно быть проверено как на уникальность, так и на присутствие:

# Within School.rb:
validates :domain, presence: true, uniqueness: true

Затем, в вашем ApplicationController, реализуйте поиск before_action, чтобы найти школу на основе запрашивающего URL. Это будет в формате school1.com или school2.com. Обратите внимание, что использование ! автоматически вызовет ошибку 404, если школа не найдена.

before_action :find_school

private

def find_school
  @school = School.find_by_domain!(request.host)
end 

Чтобы проверить это локально, вы можете отредактировать файл hosts с помощью следующей команды:

sudo nano /etc/hosts

Добавьте следующие строки:

127.0.0.1 school1.com
127.0.0.1 school2.com

Затем вы можете получить доступ к своему приложению через веб-браузер, используя school1.com:3000 и school2.com:3000. (Вам нужно использовать порт 3000, так как это порт, который ваше приложение rails будет использовать по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...