Rails:如何验证枚举中某些类型的唯一性

时间:2016-08-05 07:11:45

标签: ruby-on-rails activerecord enums

我有一个带有以下枚举的模型:

# Schema
# account_type :integer, not null

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

我必须确保只存在一个:deposit:withdrawal:fee帐户,但允许无限数量的:user帐户。我该如何处理模型验证呢?

4 个答案:

答案 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_typeenum,您可以直接使用提供的帮助程序 user?

validates :account_type, uniqueness: true, if: :user?