我有一个模型Day
,它代表时间表中的一天。我注意到,每当我调用@day.save
它时,它都会写入数据库,即使对象的所有属性都没有改变它们的值。
@day = Day.last
=> #<Day lunch_minutes: 0, updated_at: "2012-08-19 12:09:40", work_hours: 5.5>
一天的长度以小时为单位,午休时间的长度以分钟为单位,存储起来。我已经裁剪了一些不相关的属性。
@day.lunch_minutes
=> 0
@day.lunch_minutes = 0
=> 0
@day.changes
=> {"lunch_minutes"=>[0, 0]}
@day.lunch_minutes_changed?
=> true
那应该是假的。与不为零的值进行比较:
@day.work_hours = 5.5
=> 5.5
@day.work_hours_changed?
=> false
因此,如果我调用保存,则会调用它。理想情况下,这里不会有不必要的数据库交互。
@day.save
(0.5ms) UPDATE "days" SET "lunch_minutes" = 0, "updated_at" = '2012-08-19 12:22:59.586860' WHERE "days"."id" = 48
我不确定这是否是 Rails 错误,或者我在某处做错了什么。看起来这可能是“changes_from_zero_to_string”中的问题?- 我认为&& value != 0
在该方法中添加一个可以修复它 - 但我想知道是否有其他人以前看过这个/一个修复?