2011-09-08 111 views
0

我有4個模特我正在使用:用戶,列表,權限,邀請。驗證模型對相關模型的唯一性?

它們之間有聯繫,像這樣:

用戶有很多名單,並列出有很多用戶,加入表是權限表。 用戶可以與邀請共享列表。我邀請的模型看起來像這樣:

Invitation(id: integer, list_id: integer, sender_id: integer, recipient_email: string, created_at: datetime, updated_at: datetime) 

我需要做的,是當用戶創建的邀請,我想運行檢查,確保目標用戶是什麼,還沒有針對許可名單。

在我的邀請模式,我現在有這樣的:

validates_uniqueness_of :list_id, :scope => :recipient_email, :message => "is already shared with this user" 

這不工作,雖然,因爲我真的需要看的權限模型,並創造了我的邀請的這樣做:

validates_uniqueness_of :list_id, :scope => :user_id, :message => "is already shared with that user" 

基本上,我想在發送邀請之前檢查用戶和列表之間是否已存在關係。如果有必要,我可以重做數據庫邏輯,我只是​​停留在這一點上。

回答

0

對於我自己的情況,我似乎已經想通了。這裏是我的自定義方法/驗證以及它看起來像我的邀請模式:

validates :recipient_has_list 

    def recipient_has_list 
     user = User.find_by_email(self.recipient_email) 

     if user.lists.include?(self.list) 
     errors.add :list_id, "is already shared with that user" 
     end 
    end