remove references rails migrations generate create ruby-on-rails-3 migration

ruby-on-rails-3 - migrations - rails references



Agregar: predeterminado=> verdadero a booleano en la columna Rails existente (4)

He visto algunas preguntas (a saber, esta ) aquí en SO sobre la adición de un valor booleano predeterminado a una columna existente. Así que probé la sugerencia change_column pero no debo hacerlo bien.

Lo intenté:

$ change_column :profiles, :show_attribute, :boolean, :default => true

Que devuelve -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

A continuación, ejecutó rake db:migrate , pero el valor de :show_attribute permaneció nil . En la pregunta a la que hice referencia arriba, dice en PostgreSQL que necesita actualizarla manualmente. Como uso PostgreSQL, agregué lo siguiente en mi migración de create_profiles :

t.boolean :show_attribute, :default => true

¿Puede alguien decirme qué estoy haciendo mal aquí?


Como una variación de la respuesta aceptada, también podría usar el método change_column_default en sus migraciones:

def up change_column_default :profiles, :show_attribute, true end def down change_column_default :profiles, :show_attribute, nil end

Rails API-docs


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:

change_column_null :products, :name, false

Rails 5:

change_column_default :products, :approved, from: true, to: false

http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns

Rieles 4.2:

change_column_default :products, :approved, false

http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns

Que es una buena manera de evitar mirar sus migraciones o esquemas para las especificaciones de la columna.


change_column es un método de ActiveRecord::Migration , por lo que no puede llamarlo así en la consola.

Si desea agregar un valor predeterminado para esta columna, cree una nueva migración:

rails g migration add_default_value_to_show_attribute

Luego, en la migración creada:

def up change_column :profiles, :show_attribute, :boolean, default: true end def down change_column :profiles, :show_attribute, :boolean, default: nil end

Luego ejecute rake db:migrate .

No cambiará nada a los registros ya creados. Para hacerlo, tendría que crear una rake task o simplemente ir a la rails console y actualizar todos los registros.

Cuando agregó t.boolean :show_attribute, :default => true a la migración de create_profiles , es normal si no hizo nada. Solo se ejecutan las migraciones que aún no se han ejecutado. Si comenzó con una nueva base de datos, establecería el valor predeterminado en verdadero.


change_column :things, :price_1, :integer, default: 123, null: false

Parece ser la mejor forma de agregar un valor predeterminado a una columna existente que ya no tiene null: false .

De otra manera:

change_column :things, :price_1, :integer, default: 123

Alguna investigación que hice sobre esto:

https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b