我有一个带有以下枚举的模型:
# Schema
# account_type :integer, not null
enum account_type: {
user: 1,
deposit: 2,
withdrawal: 3,
fee: 4
}
我必须确保只存在一个:deposit
,:withdrawal
和:fee
帐户,但允许无限数量的:user
帐户。我该如何处理模型验证呢?
答案 0 :(得分:2)
您可以将条件传递给唯一性验证
validates :account_type, uniqueness: true, if: '!account_type.user?'
答案 1 :(得分:2)
validates :account_type, uniqueness: true, if: 'account_type == "user"'
答案是基于@ neydroid的回答,虽然这本身不正确,但他没有回应我的修复请求。
答案 2 :(得分: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
答案 3 :(得分:0)
在您的情况下,account_type
是 enum
,您可以直接使用提供的帮助程序 user?
validates :account_type, uniqueness: true, if: :user?