mysql允许0000-00-00
字段的值为date
,但是ActiveRecord
将Date
值的赋值与该字符串视为nil
。
我有一个遗留应用程序,它依赖于精确的字段内容来实现“从不”的概念,因此如果客户的最后付款日期是0000-00-00
,它会承认“从不”付款。
是否有方法可以覆盖此字段的ActiveRecord
(正确)验证,并将此值写入数据库,而不会弄脏我的手?
谢谢你的洞察力。
最佳答案
您可能会发现这稍微容易一点,它应该在不为模型中的每个属性执行方法的情况下获得相同的结果
class CustomerInfo < BillingDatabase
belongs_to :customer
def lastpaid
value = read_attribute(:lastpaid)
value.blank? ? "0000-00-00" : value
end
end
当然,您可以重构代码以调用read_属性两次,并将lastpayed方法作为一行代码执行。这真的是一个风格/分钟性能差异的问题。
def lastpaid
read_attribute(:lastpaid).blank? "0000-00-00" : read_attribute(:lastpaid)
end