加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:15:58 所属栏目:百科 来源:网络整理
导读:我正在尝试编写自己的时间戳方法,该方法在迁移期间运行.现在的那个现在在字段上添加了一个NOT_NULL约束,我真的不想要那个. 我遇到的问题是我有一个多模式的数据库.每个主要客户都获得自己的架构.当我们在新客户端上运行时,我们会创建一个新的租户记录,然后为
我正在尝试编写自己的时间戳方法,该方法在迁移期间运行.现在的那个现在在字段上添加了一个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)
  end
end

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

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

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

只是B小心!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读