J'ai un modèle de personne et un modèle d'article. Une personne a de nombreux articles et un article appartient à une personne.
Dans ce code, j'ai besoin de supprimer les éléments existants pour une personne et de créer de nouveaux à partir d'un paramètre (qui est un tableau de haubans). Ensuite, j'ai besoin de mettre à jour l'un des champs de l'article, en fonction de l'un de ses autres champs. P> sur le Comment puis-je résoudre ce problème? Merci de la lecture. P> p> x.item_amount = "5" code > & x.item_amount = "10" code> Lignes I Obtenir cette erreur: p>
4 Réponses :
Je soupçonnerais renvoie un hachage congelé que vous utilisez ensuite pour créer des objets p> et depuis sa congelée que vous pouvez " t Modifiez-le. P> vous pouvez p> a
Faites une copie profonde de l'objet JSON p> ou p> b
Rechargez l'instance de modèle qui doit rétabiliser l'objet de rendant les champs de manière inégale. P> option A est la solution «meilleure», mais difficile, car la seule façon dont je connais de la copie profonde est la sérialisation et la désérialisation et l'affectation de la place et de l'attribution la valeur de retour. p> p>
Merci pour votre réponse. Je ne suis pas sûr que je comprenne cependant, je n'essaie pas de modifier l'objet Hash / JSON, j'essaie de modifier l'objet ActiveRecord que je viens de créer. Cela peut avoir été un peu déroutant dans mon code, j'ai modifié certains des noms de variable pour essayer de le rendre plus clair.
Je crois que ActiveSupport :: json.decode (paramètres ["person_items"] crée le hachage gelé. Mais lorsque vous rechargez IT, ActiveCord, il suffira d'instancier un nouveau hachage qui n'est pas gelé
Recharger fonctionne lorsque vous avez essayé de supprimer le parent après avoir supprimé l'enfant
Vous pouvez contourner cela si vous lisez la personne_Items de la base de données à nouveau plutôt que d'utiliser l'association. L'association est rassis et pointant vers les rangées détruites. P>
au lieu de
essayer
@ PERSON.PERSON_ITEMS.ATEMCH.ECH DO | X | CODE> P>
PersonImitem.Où (: PERSON_ID => @ PERSERNE.ID). Cherchez-vous | x | code> p> p>
Si vous utilisez Q.Destroy avant d'enregistrer l'élément, vous obtiendrez l'erreur. mieux sauvegarder l'élément d'abord, puis utiliser Détruire. P>
Vous pouvez faire une copie profonde de tout objet dans les rails incluant JSON, alors faites-le simplement.
N'oubliez pas que La meilleure façon de corriger l'erreur clone code> conserve l'état congelé, tandis que DUP code> ne signifie pas. ne peut pas modifier la matrice congelée code> est à DUP CODE> Ce tableau congelé;) P> person_items_from_param = ActiveSupport::JSON.decode(params["person_items"]).dup