0

给定以下发票模型:

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 也可以创建新记录(如果它被取消)?

4

2 回答 2

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
于 2013-01-09T23:56:27.023 回答
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
于 2013-01-10T01:02:03.487 回答