2

也许我错过了初始化过程中的某些内容,但sorbet-rails似乎无法为某些默认的 rails 方法(例如,、、has_manybelongs_tovalidates生成方法。我可以看到生成了相应的生成关联,但是我收到类型抱怨主要方法不存在。

例如这样的类:

class Role < ApplicationRecord
  has_and_belongs_to_many :users, :join_table => :users_roles

我可以在 role.rbi 中看到自动生成的印记

  sig { returns(::User::ActiveRecord_Associations_CollectionProxy) }
  def users; end

但是,这是我在检查类型时遇到的错误:

Method has_and_belongs_to_many does not exist on T.class_of(Role) https://srb.help/7003
     3 |  has_and_belongs_to_many :users, :join_table => :users_roles
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4

1 回答 1

1

此错误是sorbet不知道该has_and_belongs_to_many方法存在的错误。通常这是由sorbet它自己提供的。我可以看到这个方法的签名是在 sorbet-typed 的activerecord.rbi中定义的。在您的仓库中,它应该位于此路径下:

sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi

您可以检查该文件是否存在于您的存储库中吗?如果没有,您可以尝试运行srb rbi sorbet-typed(按照rbi 文件 doc

Method has_and_belongs_to_many does not exist on T.class_of(Role) https://srb.help/7003
     3 |  has_and_belongs_to_many :users, :join_table => :users_roles
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
于 2020-07-22T15:48:42.337 回答