gpt4 book ai didi

ruby-on-rails - Rails/Ruby 如何覆盖迁移方法时间戳

转载 作者:行者123 更新时间:2023-12-04 03:43:10 25 4
gpt4 key购买 nike

我正在尝试编写自己的时间戳方法,该方法在迁移期间运行。现有的那个在字段上添加了一个 NOT_NULL 约束,我真的不想要那个。

我的问题是我有一个多模式的数据库。每个主要客户都有自己的架构。当我们加入新客户时,我们会创建一个新的租户记录,然后为新创建的架构运行迁移。

新模式应该是其他模式中表的精确副本,当然没有数据除外。

我运行的最后一次迁移使用的是稍旧版本的 rails。仍处于 3 级,但年龄稍大。当它创建时间戳时,它们是可空的。
当我前几天(在新的 rails 上)运行迁移时......现在所有的字段都是 NOT_NULL

我开发的代码的想法是 update_at 仅在记录更新时填充......而不是在创建时填充。 (第三方应用程序和数据库“功能”创建记录)。
创建记录的第三方应用程序和数据库功能正在使用新模式...
我已经手动删除了所有表上的所有 NOT_NULL 约束,但我不想将清理直接写入我的迁移任务中,以便更正所有 future 的表。

我认为最好的办法是覆盖已更改的时间戳方法,回到不破坏现有代码的方法。

所以这就是我需要恢复/覆盖的原因..
我现在的问题是...如何覆盖该方法。我看不到它的清晰类路径,我不确定如何覆盖它。

最佳答案

把它放在猴子补丁里……简单!

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition
def timestamps(*args)
options = args.extract_options!
column(:created_at, :datetime, options)
column(:updated_at, :datetime, options)
end
end

正如马涅克所说。由于此“修复”,对 rails 的更新将被忽略。

但他的首次发行也是如此。同样为了适应他的修复,您需要返回旧迁移并用新代码替换“时间戳”。除此之外,您还必须替换所有 future 自动生成的迁移。

我认为这不太适合 DRY..也不适合 SPOT。

只是B小心!

关于ruby-on-rails - Rails/Ruby 如何覆盖迁移方法时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15561236/

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