ruby: cómo eliminar una migración que tiene una actualización de tabla

Me hice cargo de una aplicación Ruby que usó algunas migraciones para actualizar los datos en una columna. ¿Hay alguna forma de eliminar esto de la migración sin afectar las reversiones de Ruby en la migración?

gracias maggs

preguntado el 14 de febrero de 14 a las 01:02

Como regla general, no desea editar migraciones después de que ya se hayan ejecutado. Cualquier trabajo de desarrollo futuro debe cargar el esquema en lugar de ejecutar todas las migraciones. ¿Hay alguna razón por la que necesite editar esas migraciones? -

1 Respuestas

Si la migración ya se ejecutó y ya no necesita usarla, simplemente puede eliminarla. Como se indicó en los comentarios de su publicación inicial, generalmente no es recomendable eliminar/editar migraciones después de que se hayan ejecutado, pero hay un lugar para hacerlo.

Sería importante comprender qué más está sucediendo en la migración a la que se refiere y la probabilidad de que cause problemas.

Otra posible solución es ajustar la actualización para que sea idempotente, es decir, no importa cuántas veces se ejecute, no debería cambiar el resultado. Esto podría tomar la forma de un if declaración. en pseudocódigo

class SomeMigration < ActiveRecord::Migration
  def up
    Score.each do |s|
      do_some_stuff if s.value == 1
    end
  end

  def down
    Score.each do |s|
      revert_some_stuff if s.value == 0
    end
  end
end

Respondido 14 Feb 14, 05:02

Hola, las migraciones de actualización no deberían doler, ya que los valores ya actualizados deberían permanecer iguales, pero en caso de que alguien cambie un valor, entonces no quiero volver a cambiarlo cuando ejecute la migración. En cuanto a hacer que la actualización sea impotente, ¿cuál sería la mejor manera de hacerlo para actualizar donde se han actualizado todos los registros de una tabla? las respuestas que has dado son valiosas muchas gracias maggs - maggs

Entonces, punto de menor claridad, ¡idempotente es la palabra! Impotente es bastante diferente :P En cuanto a la mejor manera de asegurarse de que las cosas no cambien, debe encontrar la lógica para decirle a Ruby cuándo realizar la acción y cuándo no. A menos que pueda expresar eso programáticamente, no puedo ver cómo se haría. - cordero

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.