JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources
Clearing polymorphic relationship by sending null data with PATCH is broken again
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Ruby
- Sterne
- 2.3k
- Forks
- 546
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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]
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
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in lib/jsonapi/request_parser.rb bei parse_update_relationship_operation und vergleiche die Regression mit Issue #656 und Commit a232243f5e1e4a24cd9bb87406c5a229326e7ea2. Reproduziere die PATCH-Beziehungsanfrage mit einer polymorphen Association und null data; abgeschlossen ist die Aufgabe, wenn das Entfernen keinen undefined-method error mehr auslöst und ein Regressionstest dies abdeckt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rails, ruby
- Bereich
- api, backend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100