多租户应用程序的轨道覆盖/范围视图

Posted

技术标签:

【中文标题】多租户应用程序的轨道覆盖/范围视图【英文标题】:rails overriding/scoping views for multi tenancy app 【发布时间】:2014-08-12 09:34:22 【问题描述】:

我想知道如何确定我的观点。我想根据组织有自定义主题,我可以直接在显示/索引操作上使用渲染......这很有效,但我必须在我的应用程序上覆盖很多操作。我更愿意在控制器级别执行此操作,并尝试使用prepend_view_path 执行此操作,但它没有将变量视为未定义。

class EditionsController < ApplicationController
  helper_method :current_organization
  prepend_view_path "app/views/#current_organization.slug/editions" #doesn't work

  def show
    @edition = Edition.find(params[:edition_id])
    @page = @edition.pages.first
    render template: "#current_organization.slug/editions/show" #works
  end

有什么想法吗?

也试过了:(同样的错误)

append_view_path(File.join(Rails.root, "app/views/#current_organization.slug"))

【问题讨论】:

【参考方案1】:

自定义主题取决于组织

与为每个公司定义完全不同的视图集相比,定义自定义 layoutsCSS 肯定更有意义吗?

--

我会亲自这样做:

#app/layouts/application.html.erb
<%= stylesheet_link_tag "application", controller_name ... %>

这将使我能够根据主题设置不同页面的样式。显然是对你想要的东西的限制,但我希望它能展示你如何模块化你的控制器等

--

如果您想创建不同的“主题”(IE 每个租户具有完全不同的视图结构),您需要使用 prepend_view_path 帮助器,如 here 所述:

#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
   prepend_view_path("views/#current_organization.slug")
end

【讨论】:

几乎,除了 current_organization 辅助方法错误为undefined,如果我把 Organization.first.slug 改为它工作正常。但似乎 prepend 是在 current_organization 帮助程序之前加载的【参考方案2】:

尝试删除prepend_view_path中的editions

prepend_view_path "app/views/#current_organization.slug"

确定添加了什么方式。如果不加before_filter

【讨论】:

以上是关于多租户应用程序的轨道覆盖/范围视图的主要内容,如果未能解决你的问题,请参考以下文章

多租户应用程序中的 Azure DocumentDB 用户

「4+1视图」学习与理解

使用多租户时的 Spring Boot 范围问题

转 多租户SaaS架构

一文读懂SaaS版多租户商城系统对多品牌企业的应用价值

带你一文读懂SaaS版多租户商城系统对多品牌企业的应用价值