2

我正在将生成 RBI 文件的方式从 Sorbet 迁移到 Tapioca。但是,我在我的 Rails 模型的许多 RBI 文件中遇到了一个反复出现的问题。尝试为关系生成签名时,RBI 文件似乎出错了has_many

(注意 - 它是 RBI 文件本身而不是生成警告的模型)

在文件中, has_many 关联user.rbi的签名是:user.plans

    sig { returns(::ActiveRecord::Associations::CollectionProxy[Plan]) }
    def plans; end

当我运行时,srb tc 我看到以下错误:

sorbet/rbi/dsl/user.rbi:110: Method [] does not exist on T.class_of(ActiveRecord::Associations::CollectionProxy) https://srb.help/7003
     110 |    sig { returns(::ActiveRecord::Associations::CollectionProxy[Plan]) }
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Got T.class_of(ActiveRecord::Associations::CollectionProxy) originating from:
    sorbet/rbi/dsl/user.rbi:110:
     110 |    sig { returns(::ActiveRecord::Associations::CollectionProxy[Plan]) }
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Did you mean:
    sorbet/rbi/gems/activerecord@6.1.4.1.rbi:3238: ActiveRecord::Delegation#[]
    3238 |  def [](*args, &block); end
4

1 回答 1

0

不幸的是,现在是木薯粉的粗糙边缘之一。由于 AR 关联代码是从 Shopify Core 中提取的,因此它最终继承了CollectionProxy.

正如我们所说,我们正在解决此问题,但与此同时,请查看此解决方法:https ://github.com/Shopify/tapioca/issues/179#issuecomment-738948320

于 2021-09-13T21:15:43.213 回答