He visto algunas preguntas (a saber, esta ) aquí en SO sobre agregar un valor booleano predeterminado a una columna existente. Así que probé la change_column
sugerencia pero no debo hacerlo bien.
Lo intenté:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Que vuelve -bash: change_column: command not found
Entonces corrí:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
...y
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Luego corrió rake db:migrate
, pero el valor de :show_attribute
permaneció nil
. En la pregunta que mencioné anteriormente, dice que en PostgreSQL debe actualizarlo manualmente. Como estoy usando PostgreSQL, agregué lo siguiente en mi create_profiles
migración:
t.boolean :show_attribute, :default => true
¿Alguien puede decirme qué estoy haciendo mal aquí?
fuente
up
método de la migración, que es una nueva clase que se generará en db / migrate /. (Eldown
método debe escribirse para deshacer lo queup
hace.) Realice ese cambio, entoncesrake db:migrate
.def self.up
ydef self.down
show
o el nombre de la columna.Como una variación de la respuesta aceptada, también podría usar el
change_column_default
método en sus migraciones:Rails API-docs
fuente
show
o el nombre de la columna.show_attribute
es el nombre de la columna, no creo que rails 5 tenga nada que ver con eso, ¿verdad?No estoy seguro de cuándo se escribió esto, pero actualmente para agregar o eliminar un valor predeterminado de una columna en una migración, puede usar lo siguiente:
Carriles 5:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
Carriles 4.2:
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
Que es una forma ordenada de evitar mirar a través de sus migraciones o esquemas para las especificaciones de la columna.
fuente
null: false
ydefault: :something
básicamenteAdemás, según el documento:
https://guides.rubyonrails.org/active_record_migrations.html
Por lo tanto, no hay un generador de rieles listo para usar. Como se especifica en las respuestas anteriores, debe completar manualmente su archivo de migración con el
change_column_default
método.Puede crear su propio generador: https://guides.rubyonrails.org/generators.html
fuente
Si acaba de realizar una migración, puede revertir y luego volver a realizar la migración.
Para revertir puede hacer todos los pasos que desee:
O, si está utilizando Rails 5.2 o más reciente:
Luego, puede hacer la migración nuevamente:
No te olvides
rake db:migrate
y si estás usando herokuheroku run rake db:migrate
fuente
Parece ser la mejor manera de agregar un valor predeterminado a una columna existente que aún no tiene
null: false
.De otra manera:
Algunas investigaciones que hice sobre esto:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b
fuente
Si no desea crear otro archivo de migración para un pequeño cambio reciente, desde Rails Console:
Luego salga y vuelva a ingresar a la consola de rails, por lo que DB-Changes estará en vigor. Entonces, si haces esto ...
Debería ver el valor predeterminado "show_attribute" como verdadero.
Para los registros existentes, si desea conservar la configuración "falsa" existente y solo actualizar los valores "nulos" a su nuevo valor predeterminado:
Actualice la migración que creó esta tabla, de modo que cualquier compilación futura de la base de datos lo haga desde el principio. También ejecute el mismo proceso en cualquier instancia desplegada de la base de datos.
Si utiliza el método "nueva migración de db", puede actualizar los valores nulos existentes en esa migración.
fuente