我有一个发票模型,包含approver_note,po_number和state_type。
我需要验证才能检查:
scope :approver, where(state_type: 3)
scope :po_no, where(state_type: 2)
validates :approver_note, :presence => true, uniqueness: { scope: [:ac_id, :approver]}, if: :state_three?
validates :po_number, :presence => true, uniqueness: { scope: [:ac_id, :po_no]}, if: :state_two?
def state_three?
self.state_type==3
end
def state_two?
self.state_type==2
end
如何确保approver_note验证程序中的唯一性在选定的记录范围内运行。它应该使用state_type = 3的记录进行验证。
我需要与此错误相似的内容......
现在可以在rails中使用吗?或者我们可以使用自定义验证来实现这一目标吗?
答案 0 :(得分:1)
scope
的{{1}}选项会检查表中两列值的组合是否为uniq,坦率地说,我真的不知道应用动态是多么聪明范围。即使是铁轨也太神奇了!
然而,自定义验证器非常简单:
uniquness
附加信息:
除此之外,我看到条件选项在Rails 4的validate_uniqueness_of中可用。我们可以使用它并构建两个验证,一个用于存在,一个用于唯一性。以防万一有人在Rails 4中寻找答案。
如果是Rails 4,
validate :approver_note_scoped_uniqueness, if: :state_three?
def approver_note_scoped_uniqueness
if self.class.approver.where(ac_id: ac_id).count > 0
errors.add(:ac_id, "My custom error message")
end
end