我正在开发一个项目,我有一个名为transaction
的模型。使用密钥transaction
,parent_transaction_id
可以有许多子事务。亲子关系只能是一层深,所以孩子不能拥有自己的孩子。
transaction
还有一个名为reference_number
的属性我希望此属性是唯一的,除了父子关系之外。因此父母和孩子可以拥有相同的reference_number
,但两个不相关的交易不能。我目前有:
validate :reference_number, uniqueness: true, allow_blank: true
我原本以为在验证时会有unless: -> { is_parent_child }
条件,但似乎不可能用这种方法做我想做的事。
任何寻找方法的帮助都将非常感激。
答案 0 :(得分:0)
有一个解决方案是编写自定义验证,如下所示:
validate :reference_number_uniq
def reference_number_uniq
if self.reference_number && self.exists?('id != ? AND reference_number = ?',
self.child_transaction_id,
self.reference_number)
errors.add(:reference_number, "is not valid")
end
end
使用unless
可能有效,但在验证reference_number的唯一性之前可能需要再执行一次查询。