次のRails3移行があり、gamesというテーブルにgame_type列が追加されています。liveがtrueであるかどうかに応じて、game_typeの値を更新することになっていますが、この値が保存されることはありません。
class AddGameTypeToGames < ActiveRecord::Migration
class Game < ActiveRecord::Base
end
def up
say "Adding game_type column to Games table"
add_column :games, :game_type, :string, :null => false, :default => 'Demo'
say_with_time "Migrating live value into game_type column" do
rows_affected = 0
Game.all.each do |game|
if game.live
game.update_attributes!(:game_type => 'Live')
rows_affected += 1
end
end
rows_affected
end
end
end
game.update_attributes!(:game_type => 'Live')
行をに変更することで、最終的にこれを機能させることができましたGame.connection.execute("UPDATE games SET game_type='Live' where id = #{game.id}")
。
なぜupdate_attributesなのか気になります!うまくいかない?これがうまく機能する他の移行があります。モデルを含めると、検証が移行の邪魔になるのを防ぐことができます。attr_accessible :game_type
移行時にゲームモデルを設定しようとしましたが、うまくいきませんでした。