2

Dayタイムシートで1日を表すというモデルがあります。@day.saveオブジェクトのどのプロパティにも値が変更されていなくても、データベースへの書き込みを呼び出すたびに気づきました。

@day = Day.last
 => #<Day lunch_minutes: 0, updated_at: "2012-08-19 12:09:40", work_hours: 5.5>

1日の長さは時間単位で、昼休みの長さは分単位で保存されます。関連性のないいくつかのプロパティを切り抜いた。

@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

したがって、saveを呼び出すと、これが呼び出されます。理想的には、ここで不要なデータベースの相互作用がないでしょう。

@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-しかし、他の誰かがこれを見たことがあるかどうか/これに対する修正を以前に知りたいですか?

4

2 に答える 2

1

どのバージョンのレールを使用していますか?アプリ(3.1.5 / 1.8.7)を試してみましたが、このように動作しません。モデルの1つでランダムな整数プロパティを使用してテストしました。

1.8.7 :006 > o = Order.first
 => <Order id:...>
1.8.7 :007 > o.order_items_count
 => 0 
1.8.7 :008 > o.order_items_count = 0
 => 0 
1.8.7 :009 > o.changes
 => {} 
1.8.7 :010 > o.order_items_count = '0'
 => "0" 
1.8.7 :011 > o.changes
 => {} 
1.8.7 :012 > o.save
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
 => true 
于 2012-08-19T13:27:22.813 に答える
0

バグのようです。

興味深いことに、コードによると、次の場合:

@day.lunch_minutes = '0'

おそらく変わっていないと思うでしょう!

それを試してみてください。実際にこの変更によって@day.lunch_minutes_changedが発生する場合は、falseの場合は、問題としてhttps://github.com/rails/railsに報告されていることを確認してください。

于 2012-08-19T13:21:23.427 に答える