我們正在爲學校開發一個在線rails應用程序,但我們希望將所有學校相互分開。 像slack管理來自一個應用程序和組織的許多組織的網站只訪問該數據。 也像,他們也在一個應用程序中分離組織。想給許多organistry的訪問
那麼最好的辦法是用於這種類型的應用程序?
我們如何在我們的Ruby on Rails應用程序中實現這一點,即我們將數據庫中的所有學校分開了?
我們正在爲學校開發一個在線rails應用程序,但我們希望將所有學校相互分開。 像slack管理來自一個應用程序和組織的許多組織的網站只訪問該數據。 也像,他們也在一個應用程序中分離組織。想給許多organistry的訪問
那麼最好的辦法是用於這種類型的應用程序?
我們如何在我們的Ruby on Rails應用程序中實現這一點,即我們將數據庫中的所有學校分開了?
由於數據庫設計的關注,你可以設計這樣的:
您應該管理一個組織模型,其中每個組織必須是子域名和您的其他型號一樣的用戶等。應該是有關聯的組織模式。您可以從請求url(如request.host,request.subdomain等)中提取子域名並根據此子域請求查找記錄。
作爲資源許可的問題,您可以使用cancan gem,您可以通過單個文件管理資源可訪問性。
https://github.com/CanCanCommunity/cancancan
希望這對您的初始設計很有幫助。
好的。
多租戶
如果你從「本土」軟件世界裏來了,你會是最好的閱讀了上multi tenancy:
Rails應用是多租戶憑藉他們通過網絡運行;他們運行一個應用程序的單個實例,然後該網絡上的任何人都可以訪問該應用程序(請記住,Internet是一個龐大的網絡)。
Rails提供了上面提到的所有功能,還有許多世界領先的公司使用它來運行(Twitter,AirBnb,Groupon等都有着名的Rails)。
您需要在數據庫系統設計讀了您的應用程序,特別是...
MVC
爲了更好地瞭解你如何使應用程序像你提到,你需要了解MVC (Model View Controller) programming pattern,它的價值在世界範圍內object-orientated系統設計,特別是涉及到Rails:
與許多其他框架一樣,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
將被分配給它,可以讓你決定誰創造了它等
沒有深入到代碼,這就是我想你需要知道的。