2013-04-04 65 views
0

我在一個虛構的場景項目中,我已經允許多個用戶的公司登錄,創建記錄,等等,誰所有連接到一個數據庫中。他們可以記錄所有缺席記錄,考勤記錄等等。的Rails:多個數據庫,相同的模式

然而,我想要做的是使用這個相同的模式,但擴展了這個允許幾個公司使用相同的模式擁有自己的數據庫。因此,每家公司都有自己的數據,但所有公司都使用相同的數據模型。換句話說,所有公司都可以創建缺席記錄,但他們每個都只能訪問他們自己創建的缺勤記錄。

我該如何做到這一點?

所有我需要的是這兩個或三個文件,我不打算的情況下商業用它,你們覺得我偷工減料別人的費用!

東西一樣簡單的的if-else決定哪些文件來使用將是我非常有用,因此,如果代碼這樣的行存在,請讓我知道。

+0

這個問題可能會被關閉,因爲它是一個有點過於概念化,並不指定哪些關係數據庫管理系統使用的是,也許更適合其他stackexchange網站之一。然而,您在這裏尋找的術語是「multitenancy」。將這個詞與'rails'和你最喜歡的RDMS的名字結合起來,我相信你會發現一些指針。 – 2013-04-04 20:51:39

+0

對不起,我正在使用SQLite3。順便提一下,在我的搜索中,多租戶彈出了幾次,我會仔細研究一下。謝謝! – Marc 2013-04-04 20:54:39

+1

這兩個Pro劇集都會有[關於多重玩家的兩個很棒的RailsCasts](https://www.google.de/search?q=railscasts+multitenacy)。 – 2013-04-04 20:55:08

回答

0

我認爲你做錯了(除非你有一個非常好的理由,爲各個公司的數據庫),怎麼好像你正在一遍又一遍地重複你的數據模型,同時引入不必要的複雜代碼。

嘗試有所有的公司在一個DB /表與具有由comapny_id分隔

例如:數據結構將是如下

companies table 
id 
name 


users table 
id 
user_name 
company_id 

但是,如果你真的想連接到多個數據庫檢查以下SO question

+0

這絕對是更容易的選擇。感謝您的回答!但是,該項目目前有許多特定類型的所有模型(例如Absence.all)的參考。有沒有什麼辦法可以在應用程序控制器中使用公司標識符在所有這類代碼中進行篩選?我只問,否則我會有很多重構做...編輯:只是發現這個:http://apidock.com/rails/ActiveRecord/Base/default_scope/class如果有人想知道我是什麼用來解決這個問題。感謝大家幫助! – Marc 2013-04-04 22:22:25

+0

根據我提出的實現,您需要添加一些與'company'模型的關係(例如:可能缺席模型將有一個user_id,用戶模型將有一個company_id),然後當用戶登錄時獲取他company_id會話並在需要時使用它。 (當然,當它涉及授權和所有時,它比這個複雜得多) – sameera207 2013-04-05 06:18:35