baa*_*h05 5 overriding timestamp ruby-on-rails classpath
我正在尝试编写自己的时间戳方法,该方法在迁移期间运行.现在的那个现在在字段上添加了一个NOT_NULL约束,我真的不想要那个.
我遇到的问题是我有一个多模式的数据库.每个主要客户都获得自己的架构.当我们在新客户端上运行时,我们会创建一个新的租户记录,然后为新创建的架构运行迁移.
新模式应该是其他模式中表的精确副本,当然除了没有数据.
我运行的最后一次迁移是使用较旧版本的rails.仍然在3年代,但一个年长的微笑.当它创建时间戳时,它们是NULLable.当我在前一天运行迁移时(在新的轨道上)......好吧所有的字段现在都是NOT_NULL
我的代码是在更新记录时仅填充了updated_at的想法而开发的...而不是在创建记录时.(第三方应用程序和数据库"函数"创建记录)..创建记录的第三方应用程序和数据库函数正在落在新架构上...我已经进入并删除了所有表上的所有NOT_NULL约束手动,但我不想将清理直接写入我的迁移任务,以便所有将来的表都得到纠正..
我认为最好的办法是覆盖已更改的timestamps方法,回到没有破坏现有代码的方法.
所以我需要恢复/覆盖的原因..
我现在的问题是......如何覆盖该方法.我看不到它的明确的类路径,我不确定如何覆盖它..
将其放入猴子补丁中...简单!
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition
def timestamps(*args)
options = args.extract_options!
column(:created_at, :datetime, options)
column(:updated_at, :datetime, options)
end
end
Run Code Online (Sandbox Code Playgroud)
正如马尼克所说。由于此“修复”,对 Rails 的更新将被忽略。
但他的首次公开募股也起到了同样的作用。另外,为了适应他的修复,您需要返回旧迁移并用新代码替换“时间戳”。除此之外,您还必须替换所有未来自动生成的迁移。
我认为这不太适合 DRY。也不适合 SPOT。
只是 B 小心!