gpt4 book ai didi

ruby-on-rails - 在 rails 迁移中将 postgres 日期时间列设置为 nil

转载 作者:行者123 更新时间:2023-11-29 13:06:02 25 4
gpt4 key购买 nike

我正在编写一个填充 premium_from 的 Rails 迁移postgres 表中的日期时间列。

我对人口没有问题,但我一直在为迁移编写回滚方法,因为当我尝试将日期时间属性更改回 nil 时,rails 或 postgres 似乎什么都不做。 .我也没有得到任何有用的错误消息,所以我完全不确定发生了什么。

这是我最近的迭代(出于绝望,我尝试单独对帐户采取行动,因为其他任何方法似乎都不起作用):

def self.down
Account.where('premium_from is not null').each do |a|
a.update_attribute(:premium_from, 'null')
end
end

这愉快地运行了大约 7 秒,然后给我留下了所有填充的 premium_from条目仍然完好无损,我也无法在谷歌中找到任何有用的东西。

有谁知道如何将日期时间列条目设置为 nil在 postgres 中?

还是我只是忽略了一些显而易见的事情?

编辑:向上看起来像这样

csv.each do |row|
if account = Account.premium.find_by_name(row.first)
# This .find is necessary because .premium uses a join, meaning that it returns
# read-only objects
Account.find(account.id).update_attribute(:premium_from, Time.parse(row.last))
end
end

最佳答案

首先,我会避免提及 Account类在你的迁移中,除非你定义了一个 Account迁移本身中的类。这始终是明智的做法,因为您可以重构 Account class 并在未来将其命名为不同的东西,然后此迁移将不会运行。类似于 class Account < ActiveRecord::Base; end应该做的。

除此之外,我建议在这种情况下只使用 SQL。它很简单,而且性能会更好。无需引入所有这些记录并构建 AR 对象,只需发布​​更新即可。以下是我的做法:

execute "UPDATE accounts SET premium_from = NULL where premium_from IS NOT NULL;"

关于ruby-on-rails - 在 rails 迁移中将 postgres 日期时间列设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11743781/

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