2016-08-05 54 views
1

我有以下枚舉的模型:Rails的:我如何驗證某些類型的獨特性在枚舉

# Schema 
# account_type :integer, not null 

enum account_type: { 
    user: 1, 
    deposit: 2, 
    withdrawal: 3, 
    fee: 4 
} 

我必須確保只有一個:deposit:withdrawal:fee帳戶存在,但允許無限數量的:user帳戶。我如何處理這個模型驗證?

回答

2
validates :account_type, uniqueness: true, if: 'account_type == "user"' 

答案是基於@ neydroid的答案,儘管這本身是不正確的,他並沒有迴應我的請求解決它。

0
class MyModel < ActiveRecord::Base 

    validate :only_one_of_most_account_types 

    def only_one_of_most_account_types 
    return if account_type == 1 
    match = MyModel.find_by(account_type: account_type) 
    errors.add(:account_type, "Already have one of these") if match && match.id != id 
    end 

end 
1

您可以通過有條件的唯一性驗證

validates :account_type, uniqueness: true, if: '!account_type.user?' 
+1

短而甜,但這不起作用,在條件中添加'?'會引發語法錯誤。將你的答案的條件改爲「account_type ==」用戶「」,我會接受它。 – amingilani