2012-06-30 50 views
0

假設我有三種模型,包括用戶,角色和事件。每個用戶可以有許多角色(例如吉他手,貝斯手等),並且每個角色可以有一個或多個用戶(例如泰德可以充當吉他手或貝斯手)來完成它。有沒有什麼辦法可以在rails中實現「每一個」關係?

我爲教堂樂隊創建了一個rota應用程序,因此它意味着每個事件都有樂隊中的每一個角色以及一個用戶來填充每個事件的每個角色。我想知道在模型中是否有強制執行這種關係的方式,或者我是否必須在應用程序的其他位置執行此操作。感謝您提前提供任何幫助!

+0

(有些樂隊有兩個吉他手) – 2012-06-30 19:14:07

+0

是的,但是這個應用程序是特定於一個樂隊的,每個樂團總是會有其中一個角色 – TangoKilo

+0

我會考慮將邏輯作爲DAL的商業規則,而不是作爲在這種情況下的ORM。 – 2012-06-30 19:21:07

回答

0

事件應該通過EventParticipation有很多用戶和EventParticipation應該

belongs_to :user 
belongs_to :event 

把一些uniqueness validation爲USER_ID,加ROLE_ID,如果你想要做一個範圍的唯一性驗證。

0

我會在模型中使用custom validation methods。下面是一些未經測試的代碼,但像

class ChurchEvent < ActiveRecord::Base 
    validate :has_one_role_each 

    def has_one_role_each 
    errors.add(:base, "only one of each role allowed") if duplicate_roles? 
    end 

    private 

    def duplicate_roles? 
    # assuming band_roles is array of roles for this event 
    band_roles.uniq.count != band_roles.count 
    end 
end 

而且對於用戶的類似的東西。

相關問題