【发布时间】:2021-01-21 13:44:11
【问题描述】:
我正在使用 Rails 应用程序访问 Dynamics NAV 数据库(今天称为 Dynamics 365 Business Central)。为了使其成为多租户,他们使用表名前缀例如:Company 1$Warehouse Entry 或Company 2$Warehouse Entry 对数据库进行分区。
我想使用在我的User 模型中定义的字段来设置它访问的公司名称。
为了访问模型中的当前用户,我在 application_controller.rb 上使用了以下内容
before_action -> { User.current = current_user }
然后我设置了一个基类,它声明了以下实例方法:
def self.set_company_name
company = User.current.nav_company ? User.current.nav_company + "$" : "Company 1$"
self.table_name = company + self.table_name
end
我也尝试使用实例变量@@company,但在阅读后我看到rails中的表名被缓存了。
我所做的工作有效,但前提是您重新启动应用程序。表名在运行时不会改变。
我怎样才能使它动态化?我看到了这个Question,但答案没有显示如何做到这一点。
【问题讨论】:
-
Company 1$Warehouse Entry和Company 2$Warehouse Entry是不同的表吗? -
是的。两张不同的桌子
-
ActiveRecord 模式假装,至少在 Ruby on Rails 实现中,数据库上的每个表都必须与一个模型相关联。有一个令人信服的理由为两个不同的表使用相同的用户模型类?
-
是的。它们是相同的模型,只是表名前缀不同。
标签: ruby-on-rails activerecord ruby-on-rails-5 rails-activerecord