我有以下枚舉的模型:Rails的:我如何驗證某些類型的獨特性在枚舉
# Schema
# account_type :integer, not null
enum account_type: {
user: 1,
deposit: 2,
withdrawal: 3,
fee: 4
}
我必須確保只有一個:deposit
,:withdrawal
和:fee
帳戶存在,但允許無限數量的:user
帳戶。我如何處理這個模型驗證?
我有以下枚舉的模型:Rails的:我如何驗證某些類型的獨特性在枚舉
# Schema
# account_type :integer, not null
enum account_type: {
user: 1,
deposit: 2,
withdrawal: 3,
fee: 4
}
我必須確保只有一個:deposit
,:withdrawal
和:fee
帳戶存在,但允許無限數量的:user
帳戶。我如何處理這個模型驗證?
validates :account_type, uniqueness: true, if: 'account_type == "user"'
答案是基於@ neydroid的答案,儘管這本身是不正確的,他並沒有迴應我的請求解決它。
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
您可以通過有條件的唯一性驗證
validates :account_type, uniqueness: true, if: '!account_type.user?'
短而甜,但這不起作用,在條件中添加'?'會引發語法錯誤。將你的答案的條件改爲「account_type ==」用戶「」,我會接受它。 – amingilani