Parece que la nueva versión de rails tiene «cambio» frente a sí mismo.y yo.métodos.

Entonces, ¿qué pasa cuando uno tiene que revertir una migración ¿cómo saber lo que las acciones a realizar. Tengo el siguiente método que necesito para implementar basado en un tutorial en línea:

class AddImageToUsers < ActiveRecord::Migration
  def self.up
    add_column :users, :image_file_name, :string
    add_column :users, :image_content_type, :string
    add_column :users, :image_file_size, :integer
    add_column :users, :image_updated_at, :datetime
  end

  def self.down
    remove_column :users, :image_file_name, :string
    remove_column :users, :image_content_type, :string
    remove_column :users, :image_file_size, :integer
    remove_column :users, :image_updated_at, :datetime
  end    
end

¿Cómo puedo hacer lo mismo con el nuevo método de cambio?

InformationsquelleAutor banditKing | 2012-04-28

3 Comentarios

  1. 109

    Para muchas operaciones carriles puede adivinar lo que es la operación inversa (sin problemas). Por ejemplo, en tu caso ¿cuál es la operación inversa de add_column llamar al rollback? Por supuesto, es remove_column. ¿Qué es la inversa de create_table? Es drop_table. Así que en estos casos los rieles saber cómo deshacer y definir un down método es superfluo (se puede ver en la documentación de la los métodos actualmente en el método de cambio de).

    Pero presta atención porque para algún tipo de operación de que usted todavía necesita para definir el down método, por ejemplo, si se cambia la precisión de una columna decimal cómo adivinar la precisión original de rollback? No es posible, por lo que necesita para definir el down método.

    Como se dijo, sugiero leer el Rieles Guía De Migraciones.

  2. 30

    Mejor utilice los botones Arriba, Abajo, Cambiar:

    En Rails 3 (Reversible): que debe agregar nueva columna en y llenar todos los registros en la tabla, sólo por arriba, y sólo eliminar esta columna en

    def up
      add_column :users, :location, :string
      User.update_all(location: 'Minsk')
    end
    
    def down
      remove_column :users, :location
    end

    Pero:

    Había que evitar el uso de cambio de método que permite ahorrar algo de tiempo. Por ejemplo, si no se necesita para actualizar el valor de la columna inmediatamente después de la adición de que se corte este código como este:

    def change
      add_column :users, :location, :string
    end

    Hasta va a añadir columna a la tabla y se retire en abajo. Mucho menos código y es una ganancia.

    On Rails 4: una manera más útil para escribir lo que necesitan en un solo lugar:

    def change
      add_column :users, :location, :string
      reversible do |direction|
        direction.up { User.update_all(location: 'Minsk') }
      end
    end
    • Bonita explicación bro
    • revertir? también es una buena manera de decirle a la dirección en la que va dentro del cambio
    • Nada de esto funciona. Acabo de seguir recibiendo ActiveRecord::IrreversibleMigration.
    • hay situaciones en las que los rieles no reversión de la migración. por favor vista a su ayuda
  3. 1
    class AddImageToUsers < ActiveRecord::Migration
      def change
        add_column :users, :image_file_name, :string
        add_column :users, :image_content_type, :string
        add_column :users, :image_file_size, :integer
        add_column :users, :image_updated_at, :datetime
      end
    end
    • Gracias.pero, ¿qué pasaría si usted fuera a deshacer. habría que saber qué hacer?
    • Me quedé dormido. Aldo ‘xoen’ Giambelluca explicar todo.

Dejar respuesta

Please enter your comment!
Please enter your name here