J'ai une colonne JSON dans mon modèle qui est un hachage vide par défaut.Utiliser la fusion! ou deep_merge! mettre à jour le hachage dans le modèle activerecord
Je veux vérifier si des clés spécifiques sont présentes et sinon pour fusionner le hachage vide avec un hachage par défaut avec les clés.
Dans mon modèle je vérifie si un utilitaire (eau, gaz ou électrique est présent) et si pas alors insérer ce hachage par défaut:
def default_config
{:config => {"features" => {"utilities" => {"water" => true, "gas" => true, "electric" => true}}}}
end
c'est ainsi que je vérifie pour savoir si un utilitaire clé est présente:
def water
has_water? || parent.has_water?
end
qui à son tour appelle ces méthodes (tous dans mon modèle):
def utility(util)
self[:config].try(:fetch, "features", nil).try(:fetch, "utilities", nil).try(:fetch, "#{util}", nil)
end
def has_water?
utility("water") == true
end
Ceci afin de pouvoir configurer la colonne JSON si les clés déjà présentes, que je tente ici:
def set_water(boolean)
new_val = cleaned_boolean(boolean)
water ? nil : self[:config].deep_merge!(default_config)
self[:config]["features"]["utilities"]["water"] = new_val
end
Quand je teste ce que je reçois
undefined method `[]=' for nil:NilClass
Erreur lors de la tentative de définition d'une valeur d'utilitaire indiquant que mon default_config
n'est pas fusionné dans le hachage vide existant.
Vous pouvez essayer d'utiliser 'force d'arrachage byebug' et de mettre un point d'arrêt avec 'binding.pry' pour voir ce qui est réellement assigné à chaque var. – Kris