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.