Ruby on rails 模型赢得';使用Model.update\u属性时不保存更改!在Rails3迁移期间
我有以下Rails 3迁移,它向名为games的表中添加了一列game_类型。它应该根据live是否为true来更新game_类型的值,但该值永远不会保存Ruby on rails 模型赢得';使用Model.update\u属性时不保存更改!在Rails3迁移期间,ruby-on-rails,ruby,ruby-on-rails-3,database-migration,Ruby On Rails,Ruby,Ruby On Rails 3,Database Migration,我有以下Rails 3迁移,它向名为games的表中添加了一列game_类型。它应该根据live是否为true来更新game_类型的值,但该值永远不会保存 class AddGameTypeToGames < ActiveRecord::Migration class Game < ActiveRecord::Base end def up say "Adding game_type column to Games table" add_column
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
class AddGameTypeToGamesfalse,:default=>Demo'
用时间说“将实时值迁移到游戏类型列”吗
受影响的行数=0
游戏。全部。每个人都做游戏|
如果游戏在线
game.update_属性!(:游戏类型=>'Live')
受影响的行数+=1
结束
结束
受影响的行数
结束
结束
结束
我最终通过更改行game.update\u属性实现了这一点!(:game_type='>'Live')
到game.connection.execute(“更新games SET game_type='Live'其中id={game.id}”)
我想知道为什么要更新_属性!不管用吗?我还有其他迁移,在这些迁移中效果很好。包括模型应该可以阻止验证妨碍迁移。在迁移过程中,我尝试在游戏模型上设置attr\u accessible:game\u type,但没有成功。在游戏模型上运行循环之前,必须添加这一行
Game.reset_column_information
Game.all.each do |game|
....
....
有时,您需要在迁移中添加一列,并在迁移后立即填充该列。在这种情况下,您需要调用Base#reset_column_information,以确保模型具有添加新列后的最新列数据
在API文档中有一个例子。查找“更改模型表后使用模型”