2016-11-29 1 views
7

Je vais avoir un problème lors de l'envoi d'un params contrôleur qui ressemble à ceci:Rails 5 params avec un objet ayant des tableaux vides sous forme de valeurs sont abandonnées

{ id: "1", stuff: {"A" => [], "B" => [], "C" => [], "D" => []} } 

La méthode ne voit que { id: "1" } et l'ensemble de paramètres stuff est tombé .

Ceci peut être modifié s'il y a des valeurs dans les tableaux. Mais dire qu'il ya des valeurs dans tous les tableaux, à l'exception de la "C" clé, ils seront tous là en plus "C" comme:

{ id: "1", stuff: {"A" => ["1"], "B" => ["2", "3"], "D" => ["4"]} } 

Je tombe dans cette mise à jour des problèmes de Rails 4.2.x -> 5.0.0 Des suggestions sur ce qui se passe ici? J'ai vu quelques articles/questions autour de munging parameters, mais je ne suis pas sûr si c'est le problème parce que dans leur exemple de tableau de la façon dont fonctionne munging est {person: []} devient {person: nil}, où la personne param n'est pas complètement abandonnée.

Répondre

6

De @sgrif dans la communauté GH:

Ceci est le comportement attendu. Il n'existe aucun moyen de coder un tableau vide en utilisant un formulaire HTML (par exemple Content-Type: url-form-encoded). Le raisons pour lesquelles vos tests passés dans Rails 4.2 est parce que les tests de contrôleur pas encoder leurs paramètres, ils ont simplement passé le hachage à travers directement. Dans Rails 5, il les code. Si votre contrôleur se soucie des tableaux vides , il est probable que vous ayez affaire à des requêtes JSON. Vous pouvez le faire dans votre test avec comme: json. Si vous ne faites que traiter une entrée de formulaire , vous ne recevrez jamais de tableau vide.

Ajout as: :json n'a pas fini par travailler pour moi, mais en ajoutant @request.headers["Content-Type"] = 'application/json' au début de l'essai a fait.

+0

Merci, ce tweak en tête fait l'affaire pour moi aussi. Avons-nous la moindre idée de la raison pour laquelle: la solution json ne fonctionne pas? – Andrew

+0

Je ne me suis pas faufilé là-dedans, désolé. – Luke

+0

Merci pour le partage! –