2011-02-14 24 views
16

Escenario: ya tenemos un modelo Documento, y queremos añadirAdición de varias columnas en una migración

  • pública
  • privadas

o más columnas utilizando una sola migración

Por lo que he buscado y leído hasta ahora, solo tiene que editar el archivo de migración. Si la migración ya se aplicó, retroceda y migre de nuevo.

  1. ¿Es esta la mejor práctica común o hay una forma mejor?
  2. Si esta es la manera de hacerlo, ¿cuál sería el nombre adecuado para esa migración?
+12

Son nombres de variables bastante terribles para usar en casi cualquier lenguaje de programación debido a que generalmente son palabras clave. –

Respuesta

61

Recuperar una migración y volver a editarla solo es seguro si esa migración es local y no se ha enviado a ningún repositorio. Editar una migración que otros hayan aplicado puede causar problemas.

La forma más segura de agregar columnas a una tabla existente es simplemente crear una nueva migración:

rails g migration add_public_and_private_to_document public:string private:string 

Si utiliza el add_[column_names]_to_[model] convención de nomenclatura, los carriles se resolverá la tabla apropiada y crean la migración desea .

tener una lectura aquí para obtener más información: http://guides.rubyonrails.org/migrations.html

0

puede emitir el comando como este:

carriles documento migratorio pública g: private string: String

2

manera @Cam es rigth .. Excepto que necesitarás actualizar dos cosas después de ejecutar la migración.

Entonces, digamos que tengo un andamio existente llamado myapp y quiero agregar más campos a ese andamio. Tres cosas por hacer.

el campo para ser añadido son:

=>

1) rails g migration add_term_count_and_current_record_count_and_previous_record_count_to_myapp term_count:integer , current_record_count:integer , previous_record_count:integer

=>

2) Update views, example updating _form.html.rb 

que tenía que añadir:

<div class="field"> 
    <%= f.label :current_record_count %><br> 
    <%= f.number_field :current_record_count%> 
    </div> 

<div class="field"> 
    <%= f.label :current_record_count %><br> 
    <%= f.number_field :previouse_record_count%> 
    </div> 

    <div class="field"> 
    <%= f.label :term_count %><br> 
    <%= f.number_field :terminations_count %> 
    </div> 

=>

3) Update Controller : 

Las nuevas versiones de los carriles tiene lo que se llama parámetro fuerte como para evitar que los hackers que pasa valores de los campos de columna arbitraria. Para abreviar, actualice el método con los nombres de los nuevos campos; de lo contrario, no verá los nuevos campos.

# Never trust parameters from the scary internet, only allow the white list through. 

def vendor_file_params 
    params.require(:vendor_file).permit(:name, :run_date, :term_count , 
    :current_record_count , :previous_record_count ,:comments) 
end 
end