Rails retorna o atributo serializado JSON with_indifferent_access

Eu já tive:

serialize :params, JSON

Mas isso retornaria o JSON e converteria símbolos de chave de hash em cadeias de caracteres. Eu quero referenciar o hash usando símbolos, como é mais comum quando se trabalha com hashes. Eu alimentei símbolos, Rails retorna strings. Para evitar isso, criei meu próprio getter / setter. O setter é simples o suficiente (codificação JSON), o getter é:

  def params
    read_attribute(:params) || JSON.parse(read_attribute(:params).to_json).with_indifferent_access
  end

Não consegui referenciarparams diretamente porque isso causaria um loop, então estou usandoread_attributee agora minhas chaves hash podem ser referenciadas com símbolos ou strings. No entanto, isso não atualiza o hash:

model.params.merge!(test: 'test')
puts model.params # => returns default params without merge

O que me faz pensar que o hash está sendo referenciado por cópia.

Minha pergunta é dupla. Posso estender a serialização JSON do registro ativo para retornar hash de acesso indiferente (ou não converter símbolos em sequências de caracteres) e ainda ter o trabalho de hash acima com mesclagem? Se não, o que posso fazer para melhorar meu getter para quemodel.params.merge! trabalho?

Eu estava esperando por algo ao longo das linhas de (que funciona):

  def params_merge!(hash)
    write_attribute(:params, read_attribute(:params).merge(hash))
  end

  # usage: model.params_merge!(test: 'test')

Melhor ainda, é só pegar o Rails para retornar um hash com acesso indiferente ou não converter meus símbolos em strings! Aprecie qualquer ajuda.

questionAnswers(4)

yourAnswerToTheQuestion