Rails devuelve el atributo serializado JSON with_indifferent_access

Anteriormente tuve

serialize :params, JSON

Pero esto devolvería el JSON y convertiría los símbolos de clave hash a cadenas. Quiero hacer referencia al hash usando símbolos, ya que es más común cuando se trabaja con hashes. Lo alimento con símbolos, Rails devuelve cadenas. Para evitar esto, creé mi propio getter / setter. El setter es bastante simple (codificación JSON), el getter es:

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

No pude referirmeparams directamente porque eso causaría un bucle, así que estoy usandoread_attribute, y ahora mis teclas hash pueden ser referenciadas con símbolos o cadenas. Sin embargo, esto no actualiza el hash:

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

Lo que me hace pensar que el hash está siendo referenciado por copia.

Mi pregunta es doble. ¿Puedo extender la serialización JSON del registro activo para devolver el hash de acceso indiferente (o no convertir los símbolos en cadenas), y aún así tener el trabajo de hash como el anterior con la combinación? Si no, ¿qué puedo hacer para mejorar mi getter para quemodel.params.merge! ¿trabajos?

Esperaba algo en la línea de (que funciona):

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

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

Mejor aún, ¡solo consigue que Rails devuelva un hash con acceso indiferente o no convierta mis símbolos en cadenas! Aprecio cualquier ayuda.

Respuestas a la pregunta(4)

Su respuesta a la pregunta