2012-05-18 43 views
0

我有一個分配模型,其具有以下字段::user_id說明:COMPANY_ID:ROLE_ID導軌3檢查多個域,如果唯一的字段值存在

每個用戶可以具有多個角色在一家公司內,但每個公司只能有一個user_id == 5的用戶。

我想做下面的事情(顯然這不起作用)。

validates :company_id, :uniqueness => { :scope => :role_id => {:is => 5}, :message => "Only one owner is allowed." } 

有沒有一種方法可以實現這個與上述類似的格式,或者我需要創建一個自定義驗證宏?

如果需要自定義驗證如何完成此操作,以及如果需要創建從ActiveModel :: EachValidator繼承的新類,那麼這個代碼的「正確」位置在哪裏? (我保存在同一個文件或創建一個新的文件,並可能保存在/ lib?)

在此先感謝。

回答

0

好吧,我想出了一個解決方案,但不肯定是否它的「軌方式」這樣做的,或者如果它只是一個黑客-Y解決方法。有人可以糾正我嗎?

我已經做了我的Association.rb文件中的以下內容:

validate :owner_exists 
. 
.. 
... 
protected 
    def owner_exists 
     errors.add(:role_id, " of owner already exists") if (role_id == 5 && Assignment.where('company_id = ? AND role_id = 5', company_id).exists?) 
    end 
1
validates_uniqueness_of :user_id, :scope => :company_id, :if => Proc.new{|user| user.role_id == 5 } 
相關問題