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