¿Cómo hago que una columna sea única y la indexe en una migración de Ruby on Rails?
Me gustaría crear una columna unique
en el script de migración de Ruby on Rails. ¿Cuál es la mejor manera de hacerlo? ¿También hay alguna manera de indexar una columna en una tabla?
Me gustaría aplicar unique
columnas en una base de datos en lugar de simplemente usar :validate_uniqueness_of
.
La respuesta corta para versiones antiguas de Rails (ver otras respuestas para Rails 4+):
add_index :table_name, :column_name, unique: true
Para indexar varias columnas juntas, pasa una matriz de nombres de columnas en lugar de un solo nombre de columna,
add_index :table_name, [:column_name_a, :column_name_b], unique: true
Si obtiene "el nombre del índice... es demasiado largo", puede agregarlo name: "whatever"
al método add_index para acortar el nombre.
Para un control detallado, existe un " execute
" método que ejecuta SQL directo.
¡Eso es todo!
Si está haciendo esto como reemplazo de las validaciones de modelos antiguos habituales, verifique cómo funciona. Es probable que el informe de errores al usuario no sea tan agradable sin validaciones a nivel de modelo. Siempre puedes hacer ambas cosas.
los rieles generan migración add_index_to_table_name column_name:uniq
o
los rieles generan migración add_column_name_to_table_name column_name:string:uniq:index
genera
class AddIndexToModerators < ActiveRecord::Migration
def change
add_column :moderators, :username, :string
add_index :moderators, :username, unique: true
end
end
Si está agregando un índice a una columna existente, elimine o comente la add_column
línea, o marque
add_column :moderators, :username, :string unless column_exists? :moderators, :username