JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources
Polymorphic code in serializer makes some AR assumptions
Personne n'a encore pris cette issue.
- Langage dominant
- Ruby
- Étoiles
- 2.3k
- Forks
- 546
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
In the following code in resource_serializer.rb
def foreign_key_types_and_values(source, relationship)
if relationship.is_a?(JSONAPI::Relationship::ToMany)
if relationship.polymorphic?
assoc = source._model.public_send(relationship.name)
# Avoid hitting the database again for values already pre-loaded
if assoc.respond_to?(:loaded?) and assoc.loaded?
assoc.map do |obj|
[obj.type.underscore.pluralize, @id_formatter.format(obj.id)]
end
else
assoc.pluck(:type, :id).map do |type, id|
[type.underscore.pluralize, @id_formatter.format(id)]
end
end
else
source.public_send(relationship.name).map do |value|
[relationship.type, @id_formatter.format(value.id)]
end
end
end
end
It makes the assumption that if you specify a polymorphic relationship that it should get the data straight from the model rather than allowing this to be changed via the resource.
It also assumes that we are using "id" and "type" which is very much an active record thing.
In my application, I am using active record, but have a "has_many" relationship to a class which then has a has_many polymorphic. I effectively want to do a has_many through the middle class straight to the polymorphic data which I cannot find a way of doing.
If the above code allowed the resource to intervene here, I could have overriden something.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans resource_serializer.rb, au niveau de foreign_key_types_and_values, et suivez la façon dont les relations polymorphes obtiennent leurs valeurs. Identifiez le point d’extension au niveau de la ressource nécessaire pour éviter les hypothèses d’Active Record concernant id/type, puis vérifiez qu’une ressource peut fournir une relation polymorphe has-many-through sans que le sérialiseur interroge directement le modèle.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rails, ruby
- Domaine
- api, backend
- Type d'issue
- Refactorisation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100