J'ai une colonne de tableau dans la base de données dans mon application Rails. Cette colonne stocke une gamme de hachages. Mais ils sont stockés comme une chaîne à l'intérieur d'un tableau. Je veux les convertir en hachage.
Valeur de la colonne de base de données. Cartes P>
JSON::ParserError (767: unexpected token at '{:card_number=>"12345678", :card_pin=>"12345", :validity=>Sat, 01 Feb 2020, :amount=>100}')
3 Réponses :
Pas la réponse complète, mais cette Mais gardez à l'esprit que l'utilisation de : validité => SAT, 01 févr. 202 code> doit être échappé:
: validité => \ "SAT, 01 février 2020 \" code>. Ensuite, vous pourriez juste faire
eval (cartes [0]) code>. p>
eval code> peut être un trou de sécurité, quelqu'un peut exécuter un code malveillant. P>
eval a un trou de sécurité. Donc, je ne peux pas l'utiliser dans mon code. Toute autre option?
Ceci est juste stupide. N'utilisez pas de colonnes de tableau pour stocker les hachages. Les colonnes Array sont une solution pour les scénarios spéciaux de cas lorsque vous souhaitez stocker des types de scalaires simples (chaînes, chiffres) dans un tableau. Il ne devrait pas être votre goto "confiture de chaque type de panneaux indésirables". p>
Et encore plus important encore, n'utilisez pas de tableaux / HSTORE / JSE / JSON / JSONB vers des données de modèle qui devraient avoir sa propre table. Ils sont bons pour des cas spéciaux où vous avez des données qui ne correspondent pas vraiment à un schéma fixe, mais ne devraient pas être le moyen par défaut de faire quoi que ce soit. P>
Juste en regardant ce hachage, vous pouvez voir que les données ont en fait un schéma assez défini et peuvent être très facilement modélisés par la mise en place d'une table et d'une association unique. Cela vous permettra de poser efficacement les données et vous donnera une intégrité référentielle. P>
Les numéros de carte d'enregistrement supplémentaires et les codes PIN en clair est simplement irresponsable. Si vous avez une brèche de base de données et que les assaillants s'éloignent d'une grande liste de numéros CC, vous pouvez être tenu responsable. P>
Je devais simplement convertir le hachage en Json avant de la pousser dans le tableau et la sauvegarder. puis lors de la récupération, je pouvais simplement faire ce qui suit. p>
Ce n'est pas Json. Êtes-vous responsable de sérialiser le contenu? Cela semble un simple
inspecter code> (convertit le hachage en chaîne)? Utilisation de
.to_json code> aurait été beaucoup mieux.