【发布时间】:2021-10-25 19:22:37
【问题描述】:
您好,我需要创建一个通过数据库运行的 rake 任务,并更新我在数据库中的 91,000 条记录。该任务需要更新 4 个参数并使它们大写,但是,其中一些参数可能是 nil 或空字符串,我试图遍历 params 数组并在它们的值与 nil 或“不同”时更新它们。关于如何使它工作的任何想法? 谢谢
task :data_uppercase => [ :environment ] do
file = File.open("caVoters.txt", "w")
cali_voter = CaVoter.where(tag: "ventura-d-2")
params = [:name_first, :name_last, :city]
updated_params = {}
CaVoter.transaction do
cali_voter.each do |cv|
params.each do |attribute|
unless cv[attribute] == '' || cv[attribute] == nil
new_param = cv[attribute].upcase
updated_params[attribute] = new_param
end
end
cv.update!(updated_params)
puts updated_params
file.puts("#{updated_params}\n")
updated_params = {}
end
end
file.close
end
没有错误,但记录根本没有更新
【问题讨论】:
-
为什么不直接创建一条 SQL UPDATE 语句并执行它呢? SQL 可以优雅地处理空值,并且比遍历每条记录要快得多。
UPDATE some_table SET first_name = upper(first_name)
标签: ruby-on-rails database transactions