2012-12-30 32 views
3

我從下往上構建一個rails應用,需要關於模型關聯的一些指導。bottom bottom rails應用協會

我們有客戶,讓他們參與多個項目。 客戶擁有從事項目工作的用戶(他們的員工),並通過文件和筆記對項目做出貢獻。 我們還與我們的客戶就項目進行協作(添加文件,註釋)。 項目包含貢獻者(文件,註釋)的貢獻者(可能是另一個客戶的一部分的用戶或分承包商)。

因此模型明智我想確保我正確捕獲一切。這是我所擁有的,但我不確定它是否完全正確,並且對其他協會開放。

Client 
 has_many :projects 
 has_many :users 

Project 
 belongs_to :client 
 has_and_belongs_to_many :contributors 
 has_and_belongs_to_many :contributions 

User 
 belongs_to :client 
 belongs_to :contributor 
 has_many :contributions 

Contributor 
 has_and_belongs_to_many :projects 
 has_one :user 
 has_many :contributions 

Contribution 
 has_and_belongs_to_many :projects 
 belongs_to :contributor 

我認爲貢獻將與文件和筆記模型相關聯;項目可能與「下一步」模型相關......我認爲所有這些都是嵌套資源。

感謝

+0

拆分用戶和貢獻者模型的目的是什麼?爲什麼它不能成爲一個模型? – Phobos98

+0

有時來自一個客戶的用戶可能會貢獻給另一個客戶的項目,或者用戶可能無法訪問項目......思考是以項目爲基礎存儲貢獻者。不是用戶,而是用戶的參考(可能是連接表)。不必要?謝謝。 – twinturbotom

回答

1

你有沒有審查the guide on associations?你是否做過模型領域的任何類型的紙質原型以澄清所有這些關聯?這些都是這個過程的重要組成部分,對於任何中等複雜的問題領域來說,重要的是讓事情脫穎而出。

我可能會使關聯Contribution關聯has_one而不是belongs_to但這可能只是偏好。我也同意Phobos98ContributorUser是不必要的區別。我認爲Contribution是將用戶行爲與項目相關聯的一個非常好的構想模型。大多數身份驗證框架(如Devise)允許您指定角色,而cancan之類的內容可以讓您對權限進行細化控制。

就嵌套資源而言,這實際上與您的應用程序如何使其數據可用有關。這就像建造一座房子。你搭起了牆,裏面有人和物品,但窗戶(路線)的數量控制着誰看到了什麼。是的,讓這些路線可用是有幫助的,但是在開始時並不需要這些路線,以確保數據模型到位。

你真的試過你在這裏的模型,看看它是否工作?藉助腳手架,您可以快速嘗試,而Rails則可以改變數據模型的微不足道,所以沒有理由讓這個問題變得更加靈活。試試看,找出什麼可行,哪些不行。然後,你會知道需要改變什麼。

+0

感謝這裏的一切。我正在旅行時沒有ROR,並正在iPad上進行此計劃。我閱讀了所有關聯文檔,以及在飛機上學習滑軌書的關聯章節。當旅行結束後,我會試試它。在此之前,我正在努力更好地理解「底層」。我抽出桌子,聽起來像是一個很好的計劃方式,一直在我的腦海裏做....感謝,我已經計劃將自己的身份驗證轉換爲應用程序(給予訪問權限)是思考模型交互將從那裏指定。謝謝! – twinturbotom

+0

Yah,實際運行的代碼很少有任何好的替代品,並且看到什麼可行,哪些不可行。在iPad上使用類似OmniGraffle的東西是規劃這種關係的好方法,但鉛筆和紙張很容易丟棄,所以不必擔心犯錯。 :) 祝你好運。 – jxpx777