2011-01-07 13 views
8

Soy bastante nuevo en Ruby on Rails y me preguntaba si habría alguna manera de editar el esquema de la base de datos para un modelo.Editar modelo de rieles desde la línea de comandos

Por ejemplo, tengo el modelo de suscriptor en mi aplicación - la forma en que creé era mediante el uso de rails generate scaffold Subscriber email:string

Pero ahora, quiero un nombre en el modelo de abonados también. ¿Hay alguna manera fácil de hacer esto? He puesto un montón de código en mis controladores y vistas actuales, por lo que no necesariamente quiero destruir el andamio, pero me gustaría editar el modelo.

Gracias de antemano,

hwrd

P. S. Estoy usando Ruby on Rails 3

+1

Lectura http: //guides.rubyonrails .org/active_record_migrations.html debería ser muy útil. – Hong

Respuesta

12

Un modelo ActiveRecord inspecciona la tabla que representa. En realidad, no necesita cambiar su modelo solo para agregar un nuevo campo (a menos que desee agregar validaciones, etc.).

Lo que se quiere hacer es hacer una nueva migración y luego migrar su base de datos:

rails g migration AddNameToSubscribers name:string 
rake db:migrate 

entonces puede empezar a hacer referencia al campo de nombre en sus controladores y vistas.

(Este comando generador puede parecer un poco mágico, pero el generador rieles reconoce este formato y generará el código apropiado add_column y remove_column Ver el Rails migration guide para su posterior lectura..)

+1

¿Pero las viejas columnas de DB aún no ocupan espacio? Sin embargo, no lo miré de esta manera. Ese es un buen punto. – hwrdprkns

+0

@hwrdprkns: Sí, todavía ocupan espacio. No estoy seguro de lo que estás preguntando. Este comando agregará el campo 'name' a la tabla' suscriptores'. ¿No es eso lo que querías? –

+1

Las columnas antiguas no se han eliminado, por lo que ocuparán espacio. La migración anterior solo agrega una columna a la tabla de suscriptores, eso es todo. – Zabba

2

Si quiere decir cambiar el esquema de la base de datos de su modelo, querrá usar migraciones.

Que va a hacer las cosas como

add_column :city, :string 
remove_column :boo 

http://guides.rubyonrails.org/migrations.html

Si sólo se refiere a la búsqueda de modelos y la actualización de los datos dentro de cada instancia, va con la respuesta de @ apneadiving.

+0

Gracias por su pronta respuesta. Me refiero a cambiar el esquema de la base de datos, lo siento, no lo dejé claro. Después de este comando, ¿mi esquema se actualizará para siempre? Además, como una nota al margen, ¿remove_column también bash any/all data en la columna para ese modelo? – hwrdprkns

+0

@hwrdprkns, cuando se quita una columna de una tabla, se pierden todos los datos. Y lo que dice @Jesse Wolgamott es esencialmente lo mismo que lo que dijo @Josh Lindsey. – Zabba

+0

Lo siento, voté a favor, ¡no fue mi intención! ¡Si editas tu respuesta, la votaré nuevamente! – hwrdprkns

Cuestiones relacionadas