¿Cómo hago que una columna sea única y la indexe en una migración de Ruby on Rails?

Resuelto Tam asked hace 15 años • 8 respuestas

Me gustaría crear una columna uniqueen 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 uniquecolumnas en una base de datos en lugar de simplemente usar :validate_uniqueness_of.

Tam avatar Sep 20 '09 03:09 Tam
Aceptado

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.

ndp avatar Sep 19 '2009 20:09 ndp

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_columnlínea, o marque

add_column :moderators, :username, :string unless column_exists? :moderators, :username
d.danailov avatar Mar 13 '2014 16:03 d.danailov