2014-11-01 69 views
0

我正在創建一個應用程序來處理運動隊。目前我有兩種模式。 Users.rb模型和Teams.rb模型。在應用程序的用戶中,我希望有團隊領隊和隊友。我想在隊友註冊時給隊長創造球隊的權利。我想要一名隊長屬於一支球隊,隊友屬於一支球隊。我希望隊伍只有一名隊長。什麼是設置這個最好的方法?我應該在用戶模型中擁有隊長和隊友別名嗎?或者做一個captains.rb模型會更好嗎?設置模型和數據庫的最佳方法

+1

隊長和隊友有一些不同的屬性嗎? – 2014-11-01 19:08:41

+0

**只是一個警告:Rails的慣例是爲模型使用單數名詞。 'rails g model用戶'會給你:** [警告]模型名稱'用戶'被識別爲一個複數,用單數'User'代替。在運行生成器之前,用--force-plural覆蓋或爲此名詞設置自定義變形規則。 – 2014-11-01 20:45:07

回答

0

如果隊長和隊友有不同的屬性,所以我認爲它更好地分離模型,但如果情況並非如此,那麼爲什麼你不爲用戶和團隊之間的隊友創建一個連接表,團隊模型有一個擁有者ID。

架構例如:

隊(owner_id,.....)

隊友(USER_ID,TEAM_ID,....)

這將幫助您設置之間的關聯belongs_to的作爲隊長的團隊和用戶模型使用團隊模型中的owner_id列和其他成員可以由has_many團隊成員通過Teammates模型完成,甚至可以使用has_and_belongs_to_many關聯。 通過這種方式,您將設法讓一個用戶擁有一個團隊,甚至是其他團隊中的一個團隊成員。

另一個想法是讓連接表中的所有成員都有一個額外的列來決定其在團隊中的角色,如果將來要添加更多角色,這將給予更多控制權,並定義您的驗證和剷起這樣的方式。

1

好吧,首先讓鋪陳關係的假設,因爲有一些是模糊的,從你的描述:

用戶可以:

  • 很多船長
  • 要上很多球隊

團隊可以:

  • 屬於一個隊長
  • 有許多用戶一樣的隊友

從這個我想你需要3種型號:

  • 用戶
  • 隊友充當has_many_through聯接用戶和團隊之間的表格

隊友模型一定會有:

  • user_id說明
  • TEAM_ID
  • 可能的角色/類型字段

而這葉,你必須做一個關於基於應用程序的決定點你將如何使用這些數據。由於團隊只有一名隊長,因此您可以在團隊模型中省略角色字段,並將一個user_id或captain_id添加到實際的團隊模型中。這意味着隊長總是被視爲特殊的,與其他隊友不同。不過,我猜測你可能想要循環所有隊員,包括隊長。這就是爲什麼你應該讓隊長成爲隊友模型中的特殊角色並添加驗證以確保只有一名隊長。那麼無論何時循環整個團隊,您都不必爲隊長做特殊處理。

假設你去的角色字段,則最終的模型將有以下關係:

隊友

  • belongs_to的:團隊
  • belongs_to的:用戶

用戶

  • 的has_many:隊友
  • 的has_many:團隊,通過:隊友

  • 的has_many:隊友
  • 的has_many:用戶,通過:隊友
  • HAS_ONE:team_captain, - > {角色:'隊長'},class_name:'隊友'

你也可以通過制定一個has_many來獲得隊長用戶而不是隊長team_mate來獲得最後一個。這篇文章對先進HAS_ONE一些有趣的細節:

http://www.rojotek.com/blog/2014/05/16/cool-stuff-you-can-do-with-rails-has_one/

0

我如下操作:

在開始應用程序允許你註冊成爲「用戶又名球隊老闆」或「隊友」

  1. Users.rb - 可以創建團隊並邀請其他隊友。具有管理權限。
  2. Teams.rb - 屬於用戶,有許多隊友。
  3. Teammates.rb - 屬於團隊。
  4. 所有分配的隊友都可以擁有布爾值的管理員可見覆選框「隊長」。這可以幫助您避免再創建一個數據庫表。除非「隊長」是「真實的」,隊友狀態是「簡單的球員」。否則,它是「上尉」。

其他方法是讓用戶創建團隊和隊友。

  1. 用戶將has_many團隊和隊友。
  2. 隊友belongs_to用戶和belongs_to隊。
  3. 團隊belongs_to用戶和has_many隊友。
相關問題