我有以下 Rails 3 迁移,它将列 game_type 添加到名为 games 的表中。它应该根据 live 是否为真来更新 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
在迁移中设置游戏模型,但这不起作用。