鉴于以下发票型号:
validates :po_number, :invoice_number, :invoice_date, :date_received, :state_id, :division_id, :pending_state_id, :approver_username, :approver_email, :presence => true
validates :po_number, :uniqueness => {:scope => :invoice_number}
有时会取消发票记录(state_id = 4),但需要重新创建。
你能帮我解决如何在po_number和invoice_number上验证唯一性的问题,这样即使相同的组合与不同的state_id一起被取消,也可以创建新记录吗?
答案 0 :(得分:0)
我认为你需要一个自定义验证器。这样的事情可能有用:
validate :unique_po_number
def unique_po_number
errors.add(:po_number, 'must be unique') if self.class.where('state != 4').where(:po_number => po_number).count > 0
end
答案 1 :(得分:0)
根据您的描述,我认为将:state_id
纳入范围并传递:unless
(或:if
)选项以排除已取消(或任何其他)可能就足够了来自支票:
validates :po_number, :uniqueness => {
:scope => [:invoice_number, :state_id],
:unless => :cancelled?
}
# assumes an instance method like
def cancelled?
state_id == 4
end