Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ActiveRecord::Associations::CollectionProxy#build has incorrect block signature #48

Open
clinejj opened this issue Jul 30, 2021 · 0 comments

Comments

@clinejj
Copy link

clinejj commented Jul 30, 2021

When creating a new ActiveRecord model through an association, for example:

class Post < ActiveRecord::Base
  has_many comments
end

class Comment < ActiveRecord::Base
  belongs_to :post
end

post = Post.new
comment = post.comments.new

the current type definitions throw an error when validating in Steep due to an incorrect signature:

 [error] The method cannot be called without a block
│ Diagnostic ID: Ruby::RequiredBlockMissing
│
└     @comment = post.comments.new
                               ~~~

This specific one comes from ActiveRecord::Associations::CollectionProxy#new(build), which is defined on https://github.com/ruby/gem_rbs_collection/blob/main/gems/activerecord/6.0/activerecord-generated.rbs#L1156-L1158

      def build: (?::Hash[untyped, untyped] attributes) { () -> untyped } -> untyped

      alias new build

The patch to fix it is to make the block optional, ie ?{ () -> untyped }

There is another method definition under ActiveRecord::AssociationRelation that likely also needs to be updated: https://github.com/ruby/gem_rbs_collection/blob/main/gems/activerecord/6.0/activerecord-generated.rbs#L259-L261

I'm happy to make a PR to address, but not sure if you would prefer to update the generated files or the patch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

1 participant