【发布时间】:2011-01-11 12:10:17
【问题描述】:
当我的模型实例被创建时,它会生成一个“invoice_no”。此 invoice_no 取决于发票的金融年份,该发票源自表格中给出的 invoice_date。
现在我验证 invoice_date 的存在。只有在invoice_date有效后,才能生成financial_year和invoice_no。
现在验证 invoice_no 唯一性的最佳方法是什么?
1. validates :invoice_date, :presence => true
2. before_create :assign_financial_year # Based on a valid invoice_date
3. before_create :generate invoice_no # Based on a valid financial_year
4. validates :invoice_no, :uniqueness => {:scope => [:financial_year, :another_field], :case_sensitive => false}
我已经根据所有相关字段在该表的数据库中放置了唯一索引。
将上述第 2 步和第 3 步与第 1 步和第 4 步的验证混合使用的最佳方法是什么? 还是我不应该打扰rails中的唯一性验证,因为它是一个生成的数字并且已经在数据库中处理?如果我不进行此验证,如果由于唯一性违规而引发异常(如果生成),那么处理异常的优雅方式是什么?
我对 Rails 相当有经验,并且已经想到了一些丑陋的方法。只是想从其他有经验的 Rails 程序员那里获得更多关于策略的意见。
【问题讨论】:
标签: ruby-on-rails activerecord callback ruby-on-rails-3