多租户应用程序的轨道覆盖/范围视图
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】:自定义主题取决于组织
与为每个公司定义完全不同的视图集相比,定义自定义 layouts
和 CSS
肯定更有意义吗?
--
我会亲自这样做:
#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
【讨论】:
以上是关于多租户应用程序的轨道覆盖/范围视图的主要内容,如果未能解决你的问题,请参考以下文章