2017-04-11 95 views
0

我正在開發一個多公司網站,其中每家公司都有其數據庫,當用戶登錄時,數據庫將根據每個用戶將擁有的「company.id」字段進行更改。問題是,當公司「X」的用戶登錄然後登錄公司「Y」的另一個用戶時,它會更改影響所有登錄用戶的數據庫,每次更改時都會更改所有用戶的數據庫更改,而不是僅更改對於誰在 登錄的用戶,這是我的代碼更改數據庫:更改每個用戶的數據庫

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_ID」的價值,將與公司的數據庫的連接,例如公司有一個值爲「32」,然後將使數據庫中的連接.yml與:

'32': 
    adapter: sqlserver 
    mode: dblib 
    dataserver: 
    host: host 
    port: 1433 
    database: database 
    username: user 
    password: pass 
    timeout: 60000 
    azure: true 

How co uld登錄每個用戶而不影響其他數據庫的其他人?

+0

不確定這是否是一個好的解決方案,但可能將用戶數據庫信息存儲在會話中,然後引用它進行查詢? – bkunzi01

回答

1

根據您對rails的瞭解來判斷,您可能不希望在應用程序中的此階段(即使是basecamp a very large rails app doesn't do that)使用自己的多租戶(通過數據庫)。那些東西可能會變得非常大而且毛茸茸,並且只有在達到足夠大的規模之後才需要發生。同樣,創建和拆除數據庫連接也會產生成本,而這對每個請求都很昂貴。

相反,我會建議使用multi-tenancy gem其中有幾個:

或者作爲替代做multi-tenancy without database segmentation

+0

謝謝你的回答,這個gem允許我爲每個用戶更改數據庫? – luis31

相關問題