2015-10-07 52 views
1

我們正在爲學校開發一個在線rails應用程序,但我們希望將所有學校相互分開。 像slack管理來自一個應用程序和組織的許多組織的網站只訪問該數據。 也像​​,他們也在一個應用程序中分離組織。想給許多organistry的訪問

那麼最好的辦法是用於這種類型的應用程序?

我們如何在我們的Ruby on Rails應用程序中實現這一點,即我們將數據庫中的所有學校分開了?

回答

0

由於數據庫設計的關注,你可以設計這樣的:

您應該管理一個組織模型,其中每個組織必須是子域名和您的其他型號一樣的用戶等。應該是有關聯的組織模式。您可以從請求url(如request.host,request.subdomain等)中提取子域名並根據此子域請求查找記錄。

作爲資源許可的問題,您可以使用cancan gem,您可以通過單個文件管理資源可訪問性。

https://github.com/CanCanCommunity/cancancan 

希望這對您的初始設計很有幫助。

1

好的。

多租戶

如果你從「本土」軟件世界裏來了,你會是最好的閱讀了上multi tenancy

http://www.theenterprisearchitect.eu/blog/wp-content/uploads/2010/04/100427_multi-tenancy_and_mde_necessary_assests_of_a_paas.png

Rails應用是多租戶憑藉他們通過網絡運行;他們運行一個應用程序的單個實例,然後該網絡上的任何人都可以訪問該應用程序(請記住,Internet是一個龐大的網絡)。

Rails提供了上面提到的所有功能,還有許多世界領先的公司使用它來運行(Twitter,AirBnb,Groupon等都有着名的Rails)。

您需要在數據庫系統設計讀了您的應用程序,特別是...


MVC

爲了更好地瞭解你如何使應用程序像你提到,你需要了解MVC (Model View Controller) programming pattern,它的價值在世界範圍內object-orientated系統設計,特別是涉及到Rails:

enter image description here

與許多其他框架一樣,Rails使用MVC構建對象。這些對象由程序員定義,但基本上允許您創建爲您提供的應用程序提供功能所需的相關數據。

具體來說,每次訪問一個Rails應用程序時 - 你會是基本操作對象充滿了從數據庫中的數據。如果需要,我會在更新中解釋任何具體內容。

在關於你的問題,整合多個組織的方式/實體整合到一個應用程序是建立數據庫模式來管理organization「父」,與用戶和數據作爲額外的元素:

#app/models/company.rb 
class Company < ActiveRecord::Base 
    has_many :users 
    has_many :invoices 
    has_many :clients, through: :invoices 
end 

#app/models/user.rb 
class User < ActiveRecord::Base 
    belongs_to :company 
    has_many :invoices 
end 

#app/models/invoice.rb 
class Invoice < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :user 
    has_many :clients 
end 

這會給你使用類似以下的能力:

#config/routes.rb 
constraints Account do 
    root "invoices#index" #-> http://company.url.com 
    resources :invoices #-> http://company.url.com/invoices/3 
end 

#lib/account.rb 
class Account 
    def matches?(request) 
     Company.exists?(request.subdomain) 
    end 
end 

你會那麼可以使用Devise用戶登錄到該組織,使他們能夠添加/編輯invoices,因爲他們需要。

每次編輯或更新發票,user將被分配給它,可以讓你決定誰創造了它等

沒有深入到代碼,這就是我想你需要知道的。