gpt4 book ai didi

ruby-on-rails - 如何对现有记录(历史数据)进行 rails 迁移?

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:07 25 4
gpt4 key购买 nike

我有一个包含两列(Column_A 和 Column_B)的模型 (Model_A)

我的模型中有以下方法,两个基于 column_A 生成 column_B 的值

Class Model_A < ActiveRecord::Base
before_save :set_column_B

def set_column_B
self.column_B = get_value_from_column_A
end

def get_value_from_column_A
# manipulate data from A to get value
column_A.join(,)
end

end

我知道我必须创建一个新的 column_B 作为迁移的第一步,但是我如何更改数据库中所有预先存在的记录以在 column_B 中具有正确的值?我应该为此编写脚本或 Rake 任务,还是可以通过迁移来完成?

最佳答案

如果你有很多记录,遍历所有记录是个坏主意。假设您有 200 万条记录,如果您采用 ActiveRecord 方式,则更新列然后执行回调和验证将花费很长时间。

如果你能用 SQL 本身做到这一点,你就可以使用 SQL 方式更新所有记录

类似于从 Spree 迁移过来的东西

class UpdateNameFieldsOnSpreeCreditCards < ActiveRecord::Migration
def up
if ActiveRecord::Base.connection.adapter_name.downcase.include? "mysql"
execute "UPDATE spree_credit_cards SET name = CONCAT(first_name, ' ', last_name)"
else
execute "UPDATE spree_credit_cards SET name = first_name || ' ' || last_name"
end
end

def down
execute "UPDATE spree_credit_cards SET name = NULL"
end
end

关于ruby-on-rails - 如何对现有记录(历史数据)进行 rails 迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44652280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com