我正在尝试编写一个非常简单的Rails迁移,它向表中添加一个新列,并使用其他列的数据组合填充它。但是,添加了列,但每个记录的列值为nil。我做错了什么?
class AddNameToPermissions < ActiveRecord::Migration
def change
add_column :auth_permissions, :name, :string
Auth::Permission.reset_column_information
Auth::Permission.all.each do |permission|
target_name = permission.target_symbol || permission.target_class
permission.name = permission.action << ", " << target_name
permission.save
end
end
end
答案 0 :(得分:2)
调用permission.save将执行包括验证程序在内的所有回调,并且验证器可能会阻止保存记录。要跳过验证器,您可以使用update_column而不是save
permission.update_column(:name, permission.action << ", " << target_name)
我还会向您推荐几个提示:
答案 1 :(得分:0)
除非您在迁移中使用默认选项,否则通常建议您在自定义rake任务中执行此操作。内容迁移有点反模式。您想要的主要逻辑是任何必须处理数据库模式的东西。仅使用add_column
行运行迁移,然后编写rake任务以将值从一个表传输到另一个表。