也称为<<“用户有很多数据库”问题。>>
环境
我的应用是这样建模的:
user has_many databases
database has_many tables
table has_many rows
row habtm(+value) columns
你明白了!
因此,不是在数据库内建立数据库, 我想:
每个用户都会在他的数据库中删除他的表(类似于phpmyadmin)
问题
我希望为每个请求配置线程安全 数据库连接和table_name
class Table < ActiveRecord::Base
end
# in some controller
# set the connection to the user-selected database from some DB list
Table.connection = current_user.session.connection
# set the name to the user-selected table from some tables list
Table.table_name = params[:table_name]
@rows = Table.all #display them
EDIT
如您所见,连接是全局的并且在线程之间共享,但根据我的应用程序的规范,每个用户都有自己的连接。现在想象两个不同的用户同时发出2个请求。
选项?
答案 0 :(得分:4)
我相信这是咒语:
使用Class.new(AR::Base)
动态创建类
post_class = Class.new(ActiveRecord::Base)
post_class.connection = set_up_connection()
post_class.table_name = :posts
@posts = post_class.all
puts @posts
# note: post_class will get GC'ed at scope end just like any var, sweet!
答案 1 :(得分:0)
Rails通常按每个请求设置一个进程,以便每个http请求都由其自己的进程处理。查找允许
的apache模块的乘客在这样的配置中不需要线程安全,事实上活动记录不完全是theadafe afaik