2006-09-16
[Rails][プラポケ]カードの position がおかしくなるバグ
前々からたまにカードのpositionが一貫性のない数値になることがあって、ソートが正しく行えなくなる等のバグがおこることがあったのだが、その再現方法がわかった。対戦後に2枚以上の連続するカードが同時に消えると確実にその現象が起こることを確認。
class Card < ActiveRecord::Base acts_as_list :scope => :player_id end
acts_as_list を使っている。
カードの削除は以下のようにしていた。高速化を意識してややトリッキー。
DefCard.find(:all).each do |def_card| con = "def_card_id = #{def_card.id} AND #{def_card.life} + life_plus <= 0" Card.destroy_all(con) end
一枚ずつ消せばいいかと思い、以下のように修正したがダメだった。
Player.find(:all).each do |player| player.cards.each do |card| next if card.life > 0 card.destroy end end
以下のように reload したら正常に動いた。いつも ActiveRecord の reload ではまる……。
Player.find(:all).each do |player| player.cards.each do |card| next if card.life > 0 card.reload card.destroy end end