Ruby on rails 添加了Rails迁移列,但未填充
我正在尝试编写一个非常简单的Rails迁移,它向表中添加一个新列,并用来自其他列的数据组合填充它。但是,会添加列,但每个记录的列值均为零。我做错了什么Ruby on rails 添加了Rails迁移列,但未填充,ruby-on-rails,ruby,rails-migrations,Ruby On Rails,Ruby,Rails Migrations,我正在尝试编写一个非常简单的Rails迁移,它向表中添加一个新列,并用来自其他列的数据组合填充它。但是,会添加列,但每个记录的列值均为零。我做错了什么 class AddNameToPermissions < ActiveRecord::Migration def change add_column :auth_permissions, :name, :string Auth::Permission.reset_column_information Auth::
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
class AddNameToPermissions permission.name=permission.action除非在迁移中使用默认选项,否则通常建议在自定义rake任务中使用默认选项。内容迁移有点反模式。您需要的主要逻辑是处理数据库模式的任何内容。只使用add\u列
行运行迁移,然后编写一个rake任务将值从一个表传输到另一个表。调用permission.save将执行所有回调,包括验证程序,可能验证程序正在阻止保存记录。要跳过验证程序,您可以使用update\u列而不是save
permission.update_column(:name, permission.action << ", " << target_name)
permission.update\u列(:name,permission.action谢谢Sean,我很感激。将其更改为update_column也不起作用。我必须编写一个自定义SQL查询来完成此操作。仍然不确定为什么它没有通过。是否有理由让rake任务更新新列的值,而不是仅仅运行一个类似于上面从服务器c模拟的循环onsole?@sixty4bit我通常对从服务器控制台直接运行而不是编写数据迁移或自定义rake任务的任何内容都很谨慎,因为它没有签入版本控制,很难跟踪,因此在需要回滚时很容易忘记管理。