ruby-on-rails - 如何在Rails迁移中将一列(包含内容)移动到另一个表?

标签 ruby-on-rails data-migration rails-migrations

我需要将一些列从一个现有表移动到另一表。如何使用Rails迁移进行操作?

class AddPropertyToUser < ActiveRecord::Migration
  def self.up
    add_column :users, :someprop, :string
    remove_column :profiles, :someprop
  end

  def self.down
    add_column :profiles, :someprop, :string
    remove_column :users, :someprop
  end
end

上面只是创建了新列,但是值保留为空...

我想避免登录数据库以手动更新表。

如果可以通过编程方式移动列值,那么性能特征是什么?它会逐行执行,还是可以批量更新?

最佳答案

我最终使用了此迁移(经过测试,它可以正常工作,并成功回滚):

class AddPropertyToUser < ActiveRecord::Migration
  def self.up
    add_column :users, :someprop, :string
    execute "UPDATE users u, profiles p SET u.someprop = p.someprop WHERE u.id = p.user_id"
    remove_column :profiles, :someprop
  end

  def self.down
    add_column :profiles, :someprop, :string
    execute "UPDATE profiles p, users u SET p.someprop = u.someprop WHERE p.user_id = u.id"
    remove_column :users, :someprop
  end
end

我喜欢它,因为它避免了大型数据库上的逐行更新。

关于ruby-on-rails - 如何在Rails迁移中将一列(包含内容)移动到另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135600/

相关文章:

ruby-on-rails - 默认情况下 simple_form - collection_check_boxes 在末尾显示 hidden_​​field

jquery - 如何循环显示一组 div(例如 Twitter 徽章小部件)?

ruby-on-rails - Friendly_id 名称未显示在 url 中

django - 在Django 1.7上的数据迁移中,直到原子 block 结束,才能执行查询

python - 数据迁移产生的 ValueError 必须是 "User"实例,但它是吗?

ruby-on-rails-3 - has_many & belongs_to 在 postgres 中使用外键和数据库约束进行迁移?

ruby-on-rails - 跨 docker 容器共享预编译 Assets

mysql - 如何将部分xml导入到mysql表中?

sql - 从模式生成 Rails 迁移

ruby-on-rails - 将 bool 列类型更改为 int