2012-06-30 87 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 

而且对于用户的类似的东西。

相关问题