You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Error 5067问题:如何绕过该错误并在项目中实现Sorbet?

解决Sorbet检测rails-observers时的父类类型错误

问题根源

Sorbet自动生成的sorbet/rbi/todo.rbi文件错误地将ActiveRecord::Observer定义为module,但实际上它是一个继承自ActiveRecord::Base的类,这直接导致你的SupplierObserver继承时触发类型检测错误。

可行解决方案

1. 手动修正RBI定义(推荐长期方案)

  • 打开sorbet/rbi/todo.rbi,删除该行:module ActiveRecord::Observer; end
  • 新建或编辑sorbet/rbi/rails-observers.rbi,添加正确的类定义:
    class ActiveRecord::Observer < ActiveRecord::Base
      # 按需添加Observer的核心方法签名,示例:
      def self.observe(*models); end
      def after_create(record); end
      def after_update(record); end
      def after_destroy(record); end
    end
    
    这样Sorbet就能正确识别ActiveRecord::Observer作为合法父类。

2. 临时跳过单个文件检测

如果暂时不想维护RBI文件,可以在app/models/supplier_observer.rb顶部添加Sorbet指令,跳过该文件的类型检测:

# typed: ignore

注意:这只是临时 workaround,不建议长期使用。

3. 强制Tapioca生成正确RBI(并避免被覆盖)

  • 先删除旧的todo.rbi:rm sorbet/rbi/todo.rbi
  • 重新运行Tapioca生成gem RBI:tapioca gems
  • 如果Tapioca仍错误生成module定义,手动覆盖为正确的类定义后,在tapioca/config.yml中添加排除规则,防止自定义RBI被覆盖:
    exclude:
      - sorbet/rbi/rails-observers.rbi
    

内容的提问来源于stack exchange,提问作者Jean Pierry S Mendonça

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:40:42