run remove rails migrations data create column ruby-on-rails ruby-on-rails-4 rails-migrations

ruby-on-rails - remove - rollback migration rails



Rails 4: schema.db muestra los eventos "No se pudo volcar la tabla" debido al siguiente método NoMethodError#undefined `[] ''for nil: NilClass" (2)

He estado trabajando en una aplicación de Rails 4.0 con sqlite (predeterminado para el entorno de desarrollo Rails) para eventos (hackathons) que tiene un modelo principal, Event, para el que puede haber muchos Press_Blurbs.

Primero ejecuté algunos generadores de andamios que crearon algunas migraciones que ejecuté aparentemente sin problemas:

class CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string :city t.string :theme t.datetime :hackathon_start t.datetime :hackathon_end t.datetime :show_start t.datetime :show_end t.text :about t.string :hack_rsvp_url t.string :show_rsvp_url t.timestamps end end end class CreatePressBlurbs < ActiveRecord::Migration def change create_table :press_blurbs do |t| t.string :headline t.string :source_name t.string :source_url t.string :logo_uri t.timestamps end end end

Luego agregué algunas relaciones a los modelos:

class Event < ActiveRecord::Base has_many :press_blurbs end class PressBlurb < ActiveRecord::Base belongs_to :event end

... y agregó / ejecutó una migración para agregar una referencia de tabla:

class AddEventRefToPressBlurbs < ActiveRecord::Migration def change add_column :press_blurbs, :event, :reference end end

Sin embargo, cuando miro schema.db esto es lo que veo en lugar de definiciones de tablas:

# Could not dump table "events" because of following NoMethodError # undefined method `[]'' for nil:NilClass # Could not dump table "press_blurbs" because of following NoMethodError # undefined method `[]'' for nil:NilClass

Otras tablas no relacionadas aparecen perfectamente en schema.rb, pero no es así. ¿Tienes idea de lo que está pasando?


Creo que tu última migración es incorrecta. Yo lo cambiaría a esto:

class AddEventRefToPressBlurbs < ActiveRecord::Migration def change add_reference :press_blurb, :event end end

Desafortunadamente, es probable que su base de datos no sea sólida porque tiene un tipo de columna no válida (es decir, no hay un tipo de columna de "referencia", pero sqlite lo hizo de todos modos). Con suerte, es solo una base de datos de desarrollo, de modo que puede eliminarla y comenzar de nuevo.


En caso de que esto ayude a alguien. Estaba haciendo esto en un sqlite dev db, y como se mencionó anteriormente, era probable que estuviera en un estado inestable de todas mis migraciones experimentales. Al eliminar el archivo sqlite, volver a crear y ejecutar todas las migraciones, ahora está bien.