ActiveRecordRelations cannot generate an RBI for an Active Record model with a composite primary key
Los mantenedores suelen responder en 3 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 76/100
Línea de trabajo
Start in lib/tapioca/dsl/compilers/active_record_relations.rb around line 801 and inspect ActiveRecordColumnTypeHelper#type_for in lib/tapioca/dsl/compilers/helpers/active_record_column_type_helper.rb around line 60. Run the supplied repro.rb with Rails 8 and PostgreSQL available, then verify generation succeeds for the composite key and produces typed tuple ids while preserving scalar primary-key behavior.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
ActiveRecordRelations cannot generate an RBI for an Active Record model with a composite primary key. When generating ids, it passes
constant.primary_key—an Array—to ActiveRecordColumnTypeHelper#type_for, whose argument is typed as String.
Reproduced with Tapioca 0.19.2 and Rails 8. The same call is present in v0.20.0 and current main, though I have only run this reproduction against
0.19.2.
Minimal reproduction
With tapioca 0.19.2, Active Record 8, and the PostgreSQL adapter available, run bundle exec ruby repro.rb:
require "active_record"
require "active_record/connection_adapters/postgresql/oid/uuid"
require "tapioca/internal"
require "tapioca/dsl/compilers/active_record_relations"
class CompositeRecord < ActiveRecord::Base
self.primary_key = %w[listing_id checkin_on checkout_on]
def self.table_exists? = true
def self.columns_hash
%w[listing_id checkin_on checkout_on].to_h do |name|
[name, Struct.new(:null).new(false)]
end
end
def self.attribute_types
{
"listing_id" => ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Uuid.new,
"checkin_on" => ActiveRecord::Type::Date.new,
"checkout_on" => ActiveRecord::Type::Date.new,
}
end
end
compiler = Tapioca::Dsl::Compilers::ActiveRecordRelations
pipeline = Tapioca::Dsl::Pipeline.new(
requested_constants: [CompositeRecord],
requested_compilers: [compiler],
)
root = RBI::Tree.new
compiler.new(pipeline, root, CompositeRecord).decorate
The metadata is supplied in memory to keep the reproduction database-free; it exercises the actual compiler.
Actual result
TypeError: Parameter 'attribute_name': Expected type ::String,
got type Array with value ["listing_id", "checkin_on", "checkout_on"]
Caller: .../active_record_relations.rb:801
Definition: .../active_record_column_type_helper.rb:60
Expected result
Generation succeeds, with ids returning typed tuples for these columns—for example, T::Array[[::String, ::Date, ::Date]].
ActiveRecordColumnTypeHelper#type_for("id") already delegates to its composite-aware id_type method. Could the Relations compiler use that path for ids,
while preserving scalar/nonstandard primary-key behavior?
Related earlier work: #1966 addresses composite find overloads; #2007 addresses composite column types.
- Lenguaje dominante
- Ruby
- Estrellas
- 873
- Forks
- 164
- Merge medio
- 4 d 19 h
- PR fusionados (30 d)
- 8
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 3 días
-
Improve `check-shims` performancePosiblemente ocupada @KaanOzkan la tomó hoy. Abierto
Shopify/tapioca#2728 · 1 asignado ·
Los mantenedores suelen responder en 3 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
Los mantenedores suelen responder en 3 días
-
Prepending a module can cause `tapioca dsl` to produce an untyped signatureQuizá libre de nuevo @KaanOzkan la tomó hace 36 días y no hay ningún pull request abierto. Abiertobug
Shopify/tapioca#2705 · 1 asignado ·
Los mantenedores suelen responder en 3 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
Shopify/tapioca#2663 · 2 comentarios ·
Los mantenedores suelen responder en 3 días
Todos los issues de Shopify/tapioca
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
Los mantenedores suelen responder en 3 días
-
L: docker L: elm L: github:actions L: helm L: ruby:bundler
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
dependabot/dependabot-core#16425 ·
Los mantenedores suelen responder en 2 días
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 2 días