Asignar un valor predeterminado al crear un archivo de migración

104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Ok, utilizo la línea anterior para crear un archivo de migración que genera automáticamente código en el archivo generado para agregar una columna a un Tweet modelo con un número entero de tipo de datos. Ahora quiero agregar un valor predeterminado a la columna agregada mientras genero el archivo de migración. ¿Es eso posible? Lo busqué en Google pero no pude encontrarlo. Los chicos necesitan ayuda.

kxhitiz
fuente
consulte la Guía de Rails sobre el tema: guides.rubyonrails.org/migrations.html La información que busca se encuentra en la primera sección Anatomía de una migración
Austin Lin
1
Sé exactamente a que te refieres. Seguí intentando establecer un valor predeterminado también, y fue una especie de dolor intentar encontrar información. Simplemente generar el SQL desnudo fue más fácil, aunque entonces no hay migración en el control de versiones.
Tass

Respuestas:

166

El generador de migración predeterminado no maneja los valores predeterminados (los modificadores de columna son compatibles pero no incluyen defaulto null), pero puede crear su propio generador.

También puede actualizar manualmente el archivo de migración antes de ejecutarlo rake db:migrateagregando las opciones a add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... y lea la API de Rails

taro
fuente
9
Ok, gracias por la respuesta. Pensé que sería genial si el generador de migración predeterminado brindara la opción de manejar los valores predeterminados para no tener que editar el archivo de migración después de ser generado para especificar el valor predeterminado.
kxhitiz
9

Sí, tampoco pude ver cómo usar 'predeterminado' en el comando del generador de migración, pero pude especificar un valor predeterminado para una nueva columna de cadena de la siguiente manera modificando el archivo de migración generado antes de aplicar "rake db: migrate":

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Esto agrega una nueva columna llamada 'color' a mi modelo de 'Widget' y establece el 'color' predeterminado de los nuevos widgets en 'rojo'.

MSC
fuente
(Esto fue en Rails 4.2.)
MSC
4

Intenté t.boolean: active,: default => 1 en el archivo de migración para crear la tabla completa. Después de ejecutar esa migración cuando registré db, se hizo nulo. Aunque dije por defecto como "1". Después de eso, cambié ligeramente el archivo de migración como este, luego funcionó para mí para establecer el valor predeterminado en la creación de un archivo de migración de tabla.

t.boolean: active,: null => false,: default => 1. Trabajó para mi.

La versión de mi framework Rails es 4.0.0

Madhan Ayyasamy
fuente
:default => false?
Christopher Oezbek
2

Primero tendría que crear su migración para los conceptos básicos del modelo y luego crear otra migración para modificar la anterior usando change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Artur Pedrosa
fuente