Ruby on rails 为每个用户更改数据库
我正在开发一个多公司网站,每个公司都有自己的数据库,当用户登录时,数据库将根据每个用户将拥有的company.id字段进行更改。问题是,当公司X的一个用户登录,然后登录公司Y的另一个用户时,它会更改影响所有登录用户的数据库,每次更改时,所有用户的数据库都会更改,而不是只更改登录用户的数据库 这是我更改数据库的代码:Ruby on rails 为每个用户更改数据库,ruby-on-rails,Ruby On Rails,我正在开发一个多公司网站,每个公司都有自己的数据库,当用户登录时,数据库将根据每个用户将拥有的company.id字段进行更改。问题是,当公司X的一个用户登录,然后登录公司Y的另一个用户时,它会更改影响所有登录用户的数据库,每次更改时,所有用户的数据库都会更改,而不是只更改登录用户的数据库 这是我更改数据库的代码: def set_database if user_signed_in? company = (current_user.company_id).to_s.to_sy
def set_database
if user_signed_in?
company = (current_user.company_id).to_s.to_sym
ActiveRecord::Base.establish_connection(company)
else
ActiveRecord::Base.establish_connection(:'232')
end
end
变量company将获取用户company_id的值,并将与该公司的数据库建立连接,例如company的值为32,然后将在database.yml中与以下内容建立连接:
'32':
adapter: sqlserver
mode: dblib
dataserver:
host: host
port: 1433
database: database
username: user
password: pass
timeout: 60000
azure: true
如何在不影响其他拥有不同数据库的用户的情况下登录每个用户?根据您对rails的了解判断,您可能不希望在应用程序中的这一点上按数据库滚动自己的多租户。这种情况可能会变得非常大和毛茸茸的,在你达到足够大的规模之前不需要发生。此外,创建和拆除数据库连接也会产生成本,这对于每个请求来说都是非常昂贵的 相反,我建议使用一种有以下几种方法:
或者作为一种替代方法。不确定这是否是一个好的解决方案,但可能会将用户数据库信息存储在会话中,然后引用它进行查询?感谢您的回答,此gem允许我为每个用户更改数据库?