Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Clearing polymorphic relationship by sending null data with PATCH is broken again

Ouverte
#1,081 2 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

  • #1083 par @valscion — fermée sans fusion

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
rails, ruby
Domaine
api, backend

Piste de recherche

Commencez dans lib/jsonapi/request_parser.rb, à parse_update_relationship_operation, et comparez la régression avec l’issue #656 et le commit a232243f5e1e4a24cd9bb87406c5a229326e7ea2. Reproduisez la requête PATCH de relation avec une association polymorphe et null data ; c’est terminé lorsque la suppression ne provoque plus d’undefined-method error et qu’un test de régression la couvre.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

The original issue #656 seems to have regressed, as the same error is now raised for a polymorphic association removal.

Started PATCH "/tags/830926030/relationships/taggable" for 127.0.0.1 at 2017-07-05 11:33:31 +0300
Processing by TagsController#update_relationship as HTML
  Parameters: {"data"=>nil, "relationship"=>"taggable", "tag_id"=>"830926030"}
Internal Server Error: undefined method `[]' for nil:NilClass /Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/request_parser.rb:594:in `parse_update_relationship_operation'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/request_parser.rb:133:in `parse_modify_relationship_action'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/request_parser.rb:98:in `setup_update_relationship_action'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/request_parser.rb:38:in `setup_action'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/request_parser.rb:27:in `initialize'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/acts_as_resource_controller.rb:66:in `new'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/acts_as_resource_controller.rb:66:in `process_request'
/Users/vesa/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/jsonapi-resources-0.9.0/lib/jsonapi/acts_as_resource_controller.rb:39:in `update_relationship'

The regression seems to stem from this commit a232243f5e1e4a24cd9bb87406c5a229326e7ea2 where operations were reworked to use an operation dispatcher and operation processors.

       if relationship.is_a?(JSONAPI::Relationship::ToOne)
         if relationship.polymorphic?
-          operation_args[1].merge!(
-            key_value: verified_params[:to_one].values[0] && verified_params[:to_one].values[0][:id],
-            key_type: verified_params[:to_one].values[0] && verified_params[:to_one].values[0][:type]
-          )
+          options[:key_value] = verified_params[:to_one].values[0][:id]
+          options[:key_type] = verified_params[:to_one].values[0][:type]

https://github.com/cerebris/jsonapi-resources/commit/a232243f5e1e4a24cd9bb87406c5a229326e7ea2#diff-a32d87f955d51d1e7270b1a974529f7eR585

I am not sure how to add tests to ensure this issue does not regress again. Any pointers on how you'd like to have such tests would be nice.

I discovered this issue as I'm adding special handling to jsonapi-authorization gem: https://github.com/venuu/jsonapi-authorization/pull/75

Langage dominant
Ruby
Étoiles
2.3k
Forks
547
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de JSONAPI-Resources/jsonapi-resources

Toutes les issues de JSONAPI-Resources/jsonapi-resources

Issues similaires

Plus d'issues Ruby

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.