ruby-on-rails - 我可以在 ActiveRecord(或 Mongoid)中为数据库连接和 table_name 进行线程安全的每个请求配置吗?

标签 ruby-on-rails ruby activerecord thread-safety mongoid

也称为<<“用户有很多数据库”问题。>>

环境

我的应用程序是这样建模的:

user has_many databases  
database has_many tables  
table has_many rows  
row habtm(+value) columns   

你懂的!

因此,与其在数据库内部建模数据库, 我想要:

  • 一个保存用户的sqlite3数据库
  • 每个用户有许多 sqlite 数据库

每个用户都会在他的数据库中LCRUD他的表(类似于phpmyadmin)

问题

我想为每个请求配置线程安全 数据库连接和表名

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

编辑
如您所见,连接是全局的并在线程之间共享,但根据我的应用程序的规范,每个用户都有自己的连接。现在假设 2 个不同的用户同时发出 2 个请求。

选项?

  • 我放弃 ActiveRecord 并使用基本的数据库驱动程序
  • 我放弃线程安全

最佳答案

我相信这是咒语:
使用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!

关于ruby-on-rails - 我可以在 ActiveRecord(或 Mongoid)中为数据库连接和 table_name 进行线程安全的每个请求配置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771080/

相关文章:

ruby-on-rails - Resque 作业返回错误 : "No such file or directory - getcwd"

ruby - 在 Xcode 机器人触发器中安装 Pod

ruby-on-rails - 无法使用 activerecord-postgis-adapter 添加 st_point 列

ruby-on-rails - I18n::InvalidPluralizationData 错误

ruby-on-rails - 正则表达式匹配从字符串中获取正确数字的简单逻辑

ruby - 如何使用 rbenv 安装 ruby​​ 1.9.3-p429?

ruby-on-rails - Rails 4 按模型方法求和

ruby-on-rails - 使用关联外键通过关联查找记录

mysql - 在 Rails 中查询哈希列

ruby-on-rails - ActiveSupport::类方法的回调