多租户Rails应用程序中的租户自定义视图和资源?

7
当使用Rails引擎时,覆盖视图只需在正确的文件夹中创建新的视图即可。但是,在创建一个所有租户都驻留在同一应用程序中的多租户Rails应用程序时(它们不使用引擎),如何为租户覆盖视图呢?
例如:应用程序具有一个views/static/about_us.haml文件,需要为每个租户进行自定义。最佳覆盖此文件的方法是什么?

从名称上看,它听起来像是一个可以完全自定义的页面。我会在应用一些健全性检查以防止 XSS 等之后,将租户的自定义页面保存为某种丰富的形式,并显示它而不进行 HTML 转义。否则,例如如果有几个明确定义的租户,则为每个租户创建不同的文件/文件夹:views/tenant1/static/about_us.hamlviews/tenant2/static/about_us.haml - Halil Özgür
1个回答

1
我使用apartment gem来管理多租户环境,它有助于管理基于模式的数据库,并帮助您处理迁移问题。该应用程序根据子域名使用正确的模式。例如,在superclient.mysuperapp.com的情况下,Rails将使用superclient数据库模式,并且仅在此模式上工作,直到请求完成。对于多租户视图,在我的情况下,我在ApplicationController.rb中使用before_action来prepend自定义视图路径。
def prepend_view_paths
  subdomain = request.subdomain
  prepend_view_path "app/views/multitenancy/#{subdomain}"
end

在这种情况下,子域名是superclient。
逻辑是这样的:首先,Rails将在此路径中查找视图:“app/views/multitenancy/#{subdomain}”。如果找不到任何内容,则继续在列表中的其他路径中查找视图。
希望我的回答能够帮助你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接