Methods defined on `PrivateRelation` should return `T.self_type`
Los mantenedores suelen responder en 4 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Empieza examinando los compiladores relevantes que añaden métodos a PrivateRelation y al modelo; después, sigue cómo se genera el tipo de retorno para .all. Verifica el comportamiento con el ejemplo de Kaminari, incluido el encadenamiento de .all y la conservación de los métodos extendidos de la relación. Se considera terminado cuando el tipo generado refleja el tipo self de la relación sin perder los métodos añadidos al modelo.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Ruby
- Estrellas
- 874
- Forks
- 167
- Merge medio
- 5 d 12 h
- PR fusionados (30 d)
- 11
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Shopify/tapioca
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Shopify/tapioca#2662 · 1 comentario ·
Los mantenedores suelen responder en 4 días
-
Option to omit private methods from gem RBIs, with a per-gem opt-inPosiblemente ocupada @efegokdemir la tomó hace 2 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
Los mantenedores suelen responder en 4 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 57/100
Los mantenedores suelen responder en 4 días
-
Improve `check-shims` performancePosiblemente ocupada @KaanOzkan la tomó hace 17 días. Abierto
Shopify/tapioca#2728 · 1 asignado ·
Los mantenedores suelen responder en 4 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
Los mantenedores suelen responder en 4 días
Todos los issues de Shopify/tapioca
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
:bank: debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
cucumber/cucumber-ruby-core#346 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
TheOdinProject/curriculum#31467 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
message-patterns
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
sisimai/rb-sisimai#468 ·