假設我有三種模型,包括用戶,角色和事件。每個用戶可以有許多角色(例如吉他手,貝斯手等),並且每個角色可以有一個或多個用戶(例如泰德可以充當吉他手或貝斯手)來完成它。有沒有什麼辦法可以在rails中實現「每一個」關係?
我爲教堂樂隊創建了一個rota應用程序,因此它意味着每個事件都有樂隊中的每一個角色以及一個用戶來填充每個事件的每個角色。我想知道在模型中是否有強制執行這種關係的方式,或者我是否必須在應用程序的其他位置執行此操作。感謝您提前提供任何幫助!
假設我有三種模型,包括用戶,角色和事件。每個用戶可以有許多角色(例如吉他手,貝斯手等),並且每個角色可以有一個或多個用戶(例如泰德可以充當吉他手或貝斯手)來完成它。有沒有什麼辦法可以在rails中實現「每一個」關係?
我爲教堂樂隊創建了一個rota應用程序,因此它意味着每個事件都有樂隊中的每一個角色以及一個用戶來填充每個事件的每個角色。我想知道在模型中是否有強制執行這種關係的方式,或者我是否必須在應用程序的其他位置執行此操作。感謝您提前提供任何幫助!
事件應該通過EventParticipation有很多用戶和EventParticipation應該
belongs_to :user
belongs_to :event
把一些uniqueness validation爲USER_ID,加ROLE_ID,如果你想要做一個範圍的唯一性驗證。
我會在模型中使用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
而且對於用戶的類似的東西。
(有些樂隊有兩個吉他手) – 2012-06-30 19:14:07
是的,但是這個應用程序是特定於一個樂隊的,每個樂團總是會有其中一個角色 – TangoKilo
我會考慮將邏輯作爲DAL的商業規則,而不是作爲在這種情況下的ORM。 – 2012-06-30 19:21:07