Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 添加了Rails迁移列,但未填充_Ruby On Rails_Ruby_Rails Migrations - Fatal编程技术网

Ruby on 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::

我正在尝试编写一个非常简单的Rails迁移,它向表中添加一个新列,并用来自其他列的数据组合填充它。但是,会添加列,但每个记录的列值均为零。我做错了什么

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 AddNameToPermissionspermission.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任务的任何内容都很谨慎,因为它没有签入版本控制,很难跟踪,因此在需要回滚时很容易忘记管理。