ruby-on-rails – RailsRuby如何覆盖迁移方法时间戳

ruby-on-rails – RailsRuby如何覆盖迁移方法时间戳,第1张

概述我正在尝试编写自己的时间戳方法,该方法在迁移期间运行.现在的那个现在在字段上添加了一个NOT_NULL约束,我真的不想要那个. 我遇到的问题是我有一个多模式的数据库.每个主要客户都获得自己的架构.当我们在新客户端上运行时,我们会创建一个新的租户记录,然后为新创建的架构运行迁移. 新模式应该是其他模式中表的精确副本,当然除了没有数据. 我运行的最后一次迁移是使用较旧版本的rails.仍然在3年代,但 我正在尝试编写自己的时间戳方法,该方法在迁移期间运行.现在的那个现在在字段上添加了一个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,options)  endend

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

但他的首次提供也是如此.另外,为了适应他的修复,你需要回过头来进行迁移并用新代码替换“时间戳”.除此之外,您还必须替换所有未来自动生成的迁移.

我觉得这不适合DRY ..也不适合SPOT.

只是B小心!

总结

以上是内存溢出为你收集整理的ruby-on-rails – Rails / Ruby如何覆盖迁移方法时间戳全部内容,希望文章能够帮你解决ruby-on-rails – Rails / Ruby如何覆盖迁移方法时间戳所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1294391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存