【问题标题】:Sorbet-rails not generating RBI's for rails has_many, belongs_to, etcSorbet-rails 不为 rails has_many、belongs_to 等生成 RBI
【发布时间】:2020-07-22 23:48:42
【问题描述】:

也许我错过了初始化过程中的某些内容,但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
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

【问题讨论】:

    标签: ruby-on-rails ruby typechecking sorbet


    【解决方案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 files 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
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    【讨论】:

    • 感谢您的回复!啊,我不确定这是由sorbet-rails(我看到你是它的创造者!)还是sorbet 本身带来的。该文件已存在于sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi
    • 啊!我没有意识到自动生成的 gemfile rbis 可能会初始化为typed: ignore。我认为我们现在很好:)
    • 这不是我的问题的直接答案,但至少它导致了它。感谢您为此付出的所有努力!我的团队很高兴尝试一下
    • 谢谢 :D 如果您遇到任何问题,请随时询问 qn!
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多