Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Methods defined on `PrivateRelation` should return `T.self_type`

Aperta
#2,124 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 4 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
ruby
Ambito
devtools

Direzione di ricerca

Inizia esaminando i compilatori rilevanti che aggiungono metodi a PrivateRelation e al model, quindi traccia come viene generato il tipo restituito per .all. Verifica il comportamento con l'esempio di Kaminari, incluso il concatenamento di .all e la conservazione dei metodi estesi della relation. Il lavoro è concluso quando il tipo generato riflette il self type della relation senza perdere i metodi aggiunti al model.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

help-wanted

I wrote a compiler for Kaminari that returns the following:

sig { T.all(PrivateRelation, Kaminari::PageScopeMethods, Kaminari::ActiveRecordRelationMethods) }
def page(num = nil); end

This type is accurate, since .page uses .extending to add methods to the relation.

This works:

User.page(5).total_count

This doesn't work:

User.page(5).all.total_count
                 ^^^^^^^^^^^ Method `total_count` does not exist on `User::PrivateRelation`

That's because the return type of for .all is PrivateRelation. We could fix this problem by using T.self_type instead, which I believe more accurately captures the way ActiveRecord works.

The way that relevant compilers are currently implemented makes this a little tricky, since the methods that are being added to the PrivateRelation are also added to the model. The methods defined on the model should be PrivateRelation.

Lingua principale
Ruby
Stelle
874
Fork
166
Merge medio
5g 12h
PR unite (30g)
11

Preparare l'ambiente

  • Nessun Dockerfile né file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Shopify/tapioca

Tutte le issue di Shopify/tapioca

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.