Tengo una tabla con algunas columnas, ahora necesito modificar una columna para que sea única (sin valores duplicados), ¿cómo puedo hacer eso en ruby on rails?cómo agregar único a una columna de la tabla en ruby on rails
Respuesta
Usted puede agregar una validación de su modelo de prohibir los valores duplicados
class MyModel < ActiveRecord::Base
validates_uniqueness_of :my_column_name
end
counter = 0
Model.all.each {|m| m.some_value = counter; m.save; counter += 1;}
:)
y luego añadir la validación como @j. respondió
Alguien me corrige si me equivoco porque no lo he usado personalmente, pero creo que puede usar una migración para establecer la unicidad en el nivel de la base de datos.
def self.up
change_column :<table name>, :<attribute name>, :<data type>, :unique => true
end
Este es el código directamente de mi proyecto de trabajo:
add_index(:tickets, [:to_email, :body_hash, :from_email] , :unique => true, :limit => 255)
Nota la funcionalidad límite sólo es necesario si usted está usando único en un campo de texto (en lugar de cadena) a pesar de que ISN' t implementado en rails aún (creo que en 3.0). Puede superar esta limitación utilizando el plug-in mysql_index_length http://github.com/eparreno/mysql_index_length/
add_index(:table_name, [:column_name, :second_column_name, :third_column_name] , :unique => true, :limit => 255)
este ejemplo es la creación de un índice único de tres columnas, aunque se puede utilizar para una columna si lo desea.
Enlace al proyecto en GitHub: http://github.com/thinkbohemian/WhySpam/blob/master/db/migrate/20091223193335_add_unique_index.rb
class MyModel < ActiveRecord::Base
validates_uniqueness_of :my_column_name
end
sugirió anteriormente puede romper, si se está ejecutando unicornio en varios dinamómetros Heroku, cada uno con múltiples procesos web, etc
así una mejor manera hacerlo sería
class AddEmailIndexToUser
def change
# If you already have non-unique index on email, you will need
# to remove it before you're able to add the unique index.
add_index :users, :email, unique: true
end
end
https://robots.thoughtbot.com/the-perils-of-uniqueness-validations
o puede usar sql sin procesar en la migración para hacer esto.
execute <<-SQL
ALTER TABLE Persons
ADD UNIQUE (P_Id)
SQL
- 1. Columna decimal Ruby on Rails
- 2. Agregar una acción a un controlador existente (Ruby on Rails)
- 3. Agregar columnas de tabla a una cláusula Group by - Ruby on Rails - Postgresql
- 4. Agregar etiquetas a publicaciones en Ruby on Rails
- 5. Agregar una identificación o clase en Ruby on Rails?
- 6. ¿Cómo se define una restricción "única" en una columna de la tabla MySQL en Ruby on Rails 3?
- 7. Ruby on Rails: Cómo ordenar un collection_select
- 8. Limitando caracteres/palabras a la vista - ruby on rails
- 9. ¿Implementando la búsqueda en una aplicación Ruby on Rails 3?
- 10. ¿Cuál es la mejor manera de agregar categorías a las publicaciones? Blog de Ruby on Rails
- 11. Cómo dominar Ruby on Rails
- 12. Cómo agregar "ON update current timestamp" a la columna de la tabla existente
- 13. Perfilando una aplicación ruby / ruby on rails
- 14. Raya para un pago único. - Ruby on Rails
- 15. ¿Cómo funciona Ruby on Rails?
- 16. ¿Cómo desinstalo una aplicación Ruby on Rails?
- 17. Ruby on Rails: Módulos frente a clases
- 18. Ruby vs. Ruby on Rails
- 19. Agregar una columna entera a una tabla mysql existente basada en la columna existente
- 20. Ruby on Rails will_paginate
- 21. Ruby on Rails Switch
- 22. Ruby on Rails asociación polimórfica
- 23. ¿Cómo internacionalizar el contenido en ruby on rails?
- 24. Ruby on Rails enviar
- 25. agregar columna a SQLAlchemy Tabla
- 26. Agregar una columna a una tabla existente en una migración de Rails
- 27. HTTP-POST una imagen a la aplicación Ruby on Rails
- 28. Ruby on Rails Generar vistas
- 29. Usos de Ruby on Rails
- 30. Versiones de modelos en Ruby on Rails
esto no funcionará a nivel de tabla MySQL ... – ohana
Esto funcionó para mí con MySQL Ver 14,14 Distrib 05/05/31, para Debian-linux-gnu (x86_64). Me gustó esta solución. – Askar
Para tráfico pesado con procesos múltiples, esto puede romperse. – lulalala