Я создал мультитенантное приложение, используя apartment
и devise
gem. Поскольку я использую postgresql, apartment
gem создаст отдельную схему для каждого клиента. Моя база данных в виде нескольких таблиц, таблица user
находится в общедоступном пространстве имен, тогда как таблица pages
находится в схеме для каждого клиента. Я могу входить в систему для каждого арендатора отдельно и могу создавать отдельные записи для таблицы страниц каждого арендатора.
Теперь я хочу, чтобы эти страницы были доступны в формате, подобном этому tenant1.example.com/page-slug-here
, для этого я следую правилу в моем routes.rb
файле:
Page.where.not(slug: nil).all.each do |page|
get "/#{page.slug}", controller: "pages", action: "show", id: page.id
end
Эти правила маршрутизации работали нормально, когда приложение было однотенантным, но в мультитенантном режиме оно не работает и выдает ошибку «Нет совпадений маршрута».
Я предполагаю, что вызов базы данных в приведенном выше правиле маршрутизации просматривается в схеме public
, а не в схеме для конкретного клиента. Как исправить эту проблему?