ruby-on-rails - 如何处理 Rails 应用程序中重用的对象

标签 ruby-on-rails postgresql design-patterns activerecord architecture

  • 注意:请注意这是否是问题的最佳标题/是否愿意接受编辑建议以获得 future 值(value)*

我有一个 Multi-Tenancy Rails 应用程序,它允许客户使用他们自己的自定义 TLD。所以我可以:

www.clientA.com

www.clientB.com

www.clientC.com

等....

无论好坏,我的数据库 (postgres) 都有一个租户表,它有大约 60 列,每个租户都有各种设置和配置。有些只是标志,有些是大文本值。

application_controller.rb 中,我有一些逻辑来解析 URL,根据域查询租户表并实例化一个 @current_tenant 对象。 @current_tenant 对象在页面的整个生命周期中都可用。这发生在每个。单例的。页。我的应用程序。

虽然我有一些重型缓存,但我仍然觉得这种设计很不对,我相信它可以改进。

有这方面的最佳实践吗?处理@current_tenant 对象的最佳模式是什么?我担心内存管理。

最佳答案

您的 current_tenant 与 Rails 应用程序中普遍存在的 current_user 没有什么不同。

停止微优化。除非你对它进行了基准测试并且它显示出是一个主要瓶颈(事实并非如此,我可以向你保证)。

任何微小的性能改进(如果有的话)都会被增加的代码复杂性、缓存问题等所抵消。

做。不是。做。那。 ;)

不过有一件事,不要执行分配 @current_tenant 的 before_filter,而是将 current_tenant 方法添加到 application_controller(或其中之一它的关注点)将为请求的其余部分缓存结果:

def current_tenant
  @current_tenant ||= ....
end

关于ruby-on-rails - 如何处理 Rails 应用程序中重用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140410/

相关文章:

ruby-on-rails - 如何在后台添加视频以进行设备 Controller 注册?

ruby-on-rails - Bundler Gem 是否考虑了您的 Ruby 环境?

sql - 非常特殊的 AVG 语句

sql - 根据条件获取列的总和

c# - 向类中的每个方法添加方法调用

design-patterns - 如何定义抽象小部件?

c# - 指定我需要一个实现 2 个或更多接口(interface)的对象的接口(interface)引用

ruby-on-rails - 如何使用 Ruby MiniTest::Spec 和 Rails 进行 API 集成测试?

ruby-on-rails - 如何使用prawn gem将Base64字符串转换为pdf文件

ruby-on-rails - 记录不存在时存在