Sé que hay un rename_column transformación, pero parece que rename_index no existe.

¿Tengo que usar remove_index y add_index lugar?

InformationsquelleAutor hectorsq | 2009-03-06

5 Comentarios

  1. 0

    Puede ejecutar SQL arbitrario en sus migraciones.

    Tenemos algunos métodos auxiliares que añadir las claves externas a nuestras mesas:

    def add_foreign_key(from_table, from_column, to_table)
      constraint_name = "fk_#{from_table}_#{from_column}"
    
      execute %{alter table #{from_table}
                add constraint #{constraint_name}
                foreign key (#{from_column})
                references #{to_table}(id)
               }
      end

    Puede utilizar cualquier SQL a su base de datos admite.

    • Una situación en la que usted podría tener que utilizar execute es si los Carriles se ha añadido un índice denominado según el nombre de la tabla, entonces has cambiado el nombre de la tabla. Por ejemplo, he creado users_roles e hizo una migración para añadir un índice, que Rails nombre index_users_roles_on_role_id. Entonces me di cuenta de que necesitaba cambiar el nombre de la tabla a roles_users. Más tarde, cuando traté de quitar el índice, Rieles fue en busca de un llamado index_roles_users_on_role_id. Así que tuve que usar execute "DROP INDEX index_users_roles_on_role_id ON roles_users" en mi migración. (Esto es para MySQL.)
  2. 58

    rename_index debe ser dado cadenas y no símbolos.

    rename_index :table_name, 'old_name', 'new_name'

    Me había rascado la cabeza por un tiempo al intentar cambiar el nombre de una tabla y los índices. Rieles 3.2.3 y MySQL.

    • PS: Recuerda rename_index antes de usted rename_column, si no, a continuación, SQLServer, se produce una excepción: Either the parameter @objname is ambiguous or the claimed @objtype (INDEX) is wrong.
    • Gracias! Yo estaba tratando de utilizar símbolos en lugar de cadenas para mi índice de nombres y la rename_index operación durante mi rake db:migrate fue justo en silencio su defecto: no se produjo Ningún error, pero el cambio de nombre no sucedió.
  3. 41

    Rails 3 proporcionar un acceso directo para cambiar el nombre de un índice:

    rename_index :table_name, :old_name, :new_name

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

    Por el camino, no es más que la eliminación de la vieja y la adición de uno nuevo:

    http://apidock.com/rails/v2.3.8/ActiveRecord/ConnectionAdapters/SchemaStatements/rename_index

    • rename_index parece que se han agregado en 2.3.8, su segundo enlace muestra incluso esa versión.
    • rename_index parece que no hacen nada en Rails 3.1.3. La migración parece correr limpiamente, pero revisando tanto el esquema.rb y ejecución de SHOW INDEXES FROM table_name dentro de MySQL mostrar el índice de mantenimiento previo del nombre.
    • Como se señaló en nothus’ respuesta debajo del índice de nombres tiene que ser dado como cadenas o la rename_index llamada falla en silencio
  4. 12

    Como de Rieles 5 (EDIT: también en Rails 4), el cambio de nombre de la columna también automáticamente cambiar el nombre del índice.

    • Esto es genial! Debe ser mencionado en la respuesta.
    • Sí. Esta pregunta se la hicieron en el ’09!! 7 años más tarde, las cosas han cambiado mucho. Automática de ahora.
    • ¿Cambiar el nombre de la clave foránea así, si es que la hay?
  5. 3

    De acuerdo a la API, utilizando remove_index y add_index es la única manera de lograr esto.

    • Ya No es cierto. Debe ser eliminado?

Dejar respuesta

Please enter your comment!
Please enter your name here