您收到此错误的原因是因为 Sorbet 很难理解其原理ActiveSupport::Concern
。
这里发生的是,当include ActiveModel::Model
被调用时,它包括ActiveModel::Validations
. 但是由于两者ActiveModel::Model
和ActiveModel::Validations
都是关注点,所以两者ActiveModel::Model::ClassMethods
都 ActiveModel::Validations::ClassMethods
被添加到Form
using 中extend
。它ActiveModel::Validations::ClassMethods
提供了validates
方法,而这extend
正是 Sorbet 无法静态看到的。
首先,基本srb
工具不知道ActiveSupport::Concern
也不会产生适当的mixes_in_class_methods
调用来让 Sorbet 意识到ClassMethods
也在起作用的那些。此外,即使生成了它,它也只会在包含的一个级别上应用,并且在这种情况下会失败。
解决方法是显式添加extend ActiveModel::Validations::ClassMethods
in Form
,但这很难看。
最好的解决方案是切换到 Tapioca 工具以生成适当的 RBI 输出来解决问题。我们也将很快开始为这样的嵌套关注点生成解决方案,它应该可以正确解决这个问题。