Пользовательские представления и активы для арендаторов в мультитенантном приложении rails?

При использовании движка rails переопределение представлений так же просто, как создание новых представлений в нужной папке. Но при создании мультитенантного приложения rails, где все арендаторы находятся в одном приложении (они не используют движок), как можно переопределить представления для арендаторов.

Например:

Приложение имеет файл views/static/about_us.haml, который необходимо настроить для каждого арендатора. Как лучше всего переопределить этот файл для каждого арендатора?


person Jacob    schedule 08.06.2015    source источник
comment
Глядя на название, это звучит как страница, которую можно полностью настроить. Я бы сохранил пользовательскую страницу арендаторов в какой-то богатой форме после применения некоторых проверок работоспособности для предотвращения XSS и т. д.; и отображать его без экранирования HTML. В противном случае, например. если есть несколько четко определенных арендаторов, разные файлы/папки для каждого: views/tenant1/static/about_us.haml, views/tenant2/static/about_us.haml.   -  person Halil Özgür    schedule 20.11.2017


Ответы (1)


Я использую квартирный жемчуг, который удобен для управления многопользовательскими средами. Apartment помогает вам управлять базой данных на основе схемы и помогает с миграцией.

Приложение использует правильную схему в зависимости от поддомена. Например, в случае superclient.mysuperapp.com rails будет использовать схему базы данных superclient и будет работать только с этой схемой, пока запрос не завершится.

Для многопользовательских представлений в моем случае я использую действие before_action в ApplicationController.rb, чтобы добавлять свой пользовательский путь представления:

def prepend_view_paths
  subdomain = request.subdomain
  prepend_view_path "app/views/multitenancy/#{subdomain}"
end

Где субдомен в данном случае — суперклиент.

Логика такова: сначала рельсы будут искать представление по этому пути: «app/views/multitenancy/#{subdomain}». И если он ничего не находит, он продолжает искать представление по другим путям в списке.

Я надеюсь, что мой ответ поможет вам.

person matymad    schedule 23.02.2018