相关疑难解决方法(0)

在Rails应用程序中的查询运行时更改表名

我在Apache + mod_passenger上有一个胖的多租户Rails应用程序,它从PostgreSQL表输出产品价格,如下所示:

Table "public.products"
Column | Type
id     | bigint
name   | character varying(100)
price  | numeric(8,2)
Run Code Online (Sandbox Code Playgroud)

然后在products.rb我有......

class Product < PostgresDatabase
     self.table_name = "products"

     # ... yadda yadda

end
Run Code Online (Sandbox Code Playgroud)

我想要的是以一种非常具体的方式对"产品"表进行分区,这样我最终会得到像每个租户的products_TENANT-ID(基本上是主要产品表的视图,但这是另一个故事)并能够像这样查询:

Products.for_tenant(TENANT-ID).where(:name => "My product")......
Run Code Online (Sandbox Code Playgroud)

我想我可以创建一个方法:

class Product < PostgresDatabase
     self.table_name = "products"

     # ... yadda yadda
     def for_tenant(tid)
          self.table_name = "products_" + tid.to_s
          self
     end
end
Run Code Online (Sandbox Code Playgroud)

但考虑到有大量流量(每秒数千个请求),这会对应用程序产生什么样的影响?有什么我想念的吗?我应该尝试不同的策略吗?

非常感谢您的任何反馈/想法!

ruby activerecord ruby-on-rails rails-activerecord

1
推荐指数
1
解决办法
365
查看次数