Tengo un modelo de usuarios que necesita una :email
columna (olvidé agregar esa columna durante el andamio inicial).
Abrí el archivo de migración y agregué t.string :email
, lo hice rake db:migrate
y 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_users
y NOadd_email_to_user
?rails db:migrate
para el paso final.t.string :column_x, limit: 10, after: :column_y
Use este comando en la consola de rails
y
para ejecutar esta migración
fuente
A veces
rails generate migration add_email_to_users email:string
produce una migración como estaEn ese caso, tiene que an manualmente
add_column
parachange
:Y luego corre
rake db:migrate
fuente
rails generate migration add_email_to_users email:string
ejecutarse despuésbundle exec rails c
o 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:string
Alternativa
rails generate migration addFieldnameToTablename
Una 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 addEmailToUsers
rake db:migrate
O
db/schema.rb
, Agregue las columnas que desee en la consulta SQL.Ejecute este comando:
rake db:schema:load
Advertencia / nota
Tenga en cuenta que, la ejecución
rake db:schema:load
borra 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:mirgate
vuelva 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