Tengo un modelo de usuarios que necesita una :emailcolumna (olvidé agregar esa columna durante el andamio inicial).
Abrí el archivo de migración y agregué t.string :email, lo hice rake db:migratey obtuve un NoMethodError. Luego agregué la línea
add_column :users, :email, :string
De nuevo rake db:migrate, de nuevo NoMethodError. ¿Me estoy perdiendo un paso aquí?
Editar: aquí está el archivo de migración.
class CreateUsers < ActiveRecord::Migration
def self.up
add_column :users, :email, :string
create_table :users do |t|
t.string :username
t.string :email
t.string :crypted_password
t.string :password_salt
t.string :persistence_token
t.timestamps
end
end
def self.down
drop_table :users
end
end
fuente

add_email_to_usersy NOadd_email_to_user?rails db:migratepara el paso final.t.string :column_x, limit: 10, after: :column_yUse este comando en la consola de rails
y
para ejecutar esta migración
fuente
A veces
rails generate migration add_email_to_users email:stringproduce una migración como estaEn ese caso, tiene que an manualmente
add_columnparachange:Y luego corre
rake db:migratefuente
rails generate migration add_email_to_users email:stringejecutarse despuésbundle exec rails co solo dentro de la terminal? 2) ¿Dónde se ubica el archivo generado una vez que ejecutamos la consulta?También puedes hacer
si no ha agregado ningún dato a las tablas. Luego edite el archivo de migración agregando la columna de correo electrónico y luego llame
Esto funcionará si tiene instalados rieles 3.1 en adelante en su sistema.
Una forma mucho más simple de hacerlo es cambiar, dejar que el cambio en el archivo de migración sea como es. utilizar
Esto revertirá la última migración y la migrará nuevamente.
fuente
Para agregar una columna solo tenía que seguir estos pasos:
rails generate migration add_fieldname_to_tablename fieldname:stringAlternativa
rails generate migration addFieldnameToTablenameUna vez que se genera la migración, edítela y defina todos los atributos que desea que tenga esa columna agregada.
Nota : Los nombres de tabla en Rails siempre son plurales (para que coincidan con las convenciones de DB). Ejemplo usando uno de los pasos mencionados anteriormente
rails generate migration addEmailToUsersrake db:migrateO
db/schema.rb, Agregue las columnas que desee en la consulta SQL.Ejecute este comando:
rake db:schema:loadAdvertencia / nota
Tenga en cuenta que, la ejecución
rake db:schema:loadborra automáticamente todos los datos en sus tablas.fuente
Cuando he hecho esto, en lugar de manipular la migración original, creo una nueva con solo agregar la columna en la sección superior y una columna desplegable en la sección inferior.
Puede cambiar el original y volver a ejecutarlo si migra hacia abajo, pero en este caso creo que se realizó una migración que no funcionará correctamente.
Como está publicado actualmente, está agregando la columna y luego creando la tabla.
Si cambia el orden, podría funcionar. O bien, cuando esté modificando una migración existente, simplemente agréguela a la tabla de creación en lugar de hacer una columna de agregar por separado.
fuente
También puede forzar a las columnas de la tabla en la tabla usando
force: true, si su tabla ya existe.ejemplo :
fuente
También puede usar el método especial change_table en la migración para agregar nuevas columnas:
fuente
Puede revertir la última migración por
o deshacer esta migración específica por
y edite el archivo, luego
rake db:mirgatevuelva a ejecutarlo .fuente
También puede hacer esto ... rieles g migración add_column_to_users email: string
luego rake db: migrate también agrega: atributo de correo electrónico en tu controlador de usuario;
Para obtener más detalles, visite http://guides.rubyonrails.org/active_record_migrations.html
fuente
También puede agregar una columna a una posición específica usando antes de la columna o después de la columna como:
El archivo de migración generará el siguiente código, excepto después: correo electrónico. necesita agregar después:: correo electrónico o antes:: correo electrónico
fuente