Duplicar posible:
How do I compare two hashes?rubí Al comparar los hashes
Tengo dos hashes rubí (que son esencialmente modelos) y estoy tratando de encontrar las diferencias entre ellos, uno es una instancia antigua de un objeto donde el otro tiene nuevos valores asignados a algunos atributos. Estoy tratando de determinar qué teclas han cambiado, pero no parece haber nada incorporado en el hash para esto. Puedo pensar en algunas soluciones de fuerza bruta, pero me preguntaba si existe quizás una solución elegante.
Lo ideal sería que tengo que ser capaz de tomar dos hashs así:
element1 = {:name => "Original", :description => "The original one!"}
element2 = {:name => "Original", :description => "The new one!"}
y ser capaz de comparar/diff ellos y obtener algo a cambio como éste:
{:description => "The new one!"}
En este momento todo lo realmente puedo pensar en iterar a través de las teclas en un hash y comparar el valor de esa tecla con la clave correspondiente en el segundo hash, pero eso parece demasiado forzado.
¿Alguna idea? ¡Muchas gracias!
Para mi propósito, no me importa especialmente ya que solo necesito saber qué campos han cambiado. Si estuviera usando AR esto no sería un problema, pero todo se está abstrayendo a través de una capa de datos para CouchDB, así que me veo en la necesidad de reinventar la rueda, por así decirlo, para algunas funcionalidades. Gracias por la sugerencia. – Chelsea
Lo que por supuesto corresponde a tu comentario de "fuerza bruta", pero creo que es útil y no tan horrible o poco elegante. –
Este método no notará las claves adicionales en 'hash' other' tampoco podría decir la ausencia de la clave del valor que es 'nil', para una versión mejorada comprobar http://stackoverflow.com/a/19184270/54247 – dolzenko