Tengo una tabla sin una columna de ID. Cuando intento eliminarlo usando ActiveRecord, el SQL generado es DELETE FROM table_name WHERE ID=NULL
, lo que obviamente no funciona. ¿Hay alguna manera de eliminar de la tabla utilizando ActiveRecord, o al menos ejecutar una consulta de eliminación de SQL sin formato con marcadores de posición (por lo que no es vulnerable a la inyección de SQL)?¿cómo puedo destruir un registro sin una columna de identificación en ActiveRecord ruby?
17
A
Respuesta
24
¿Ha intentado utilizar el método delete_all de ActiveRecord? He aquí un extracto en un entorno limitado mío:
>> customer = Customer.new(:login => 'foo')
=> #<Customer id: nil, status: 0, name: nil, login: "foo", password: nil, salt: nil, api_key: nil, address: nil, town: nil, state: nil, country: "USA", zipcode: nil, balance: #<BigDecimal:1032669b0,'0.0',9(18)>, discount: 0, last_four_cc: nil, auto_renew: false, contact_name: nil, contact_email: nil, domain: "anon.limelock.com", created_at: nil, updated_at: nil>
>> customer.save
=> true
>> Customer.all.count
=> 4
>> Customer.delete_all(:login => 'foo')
=> 1
>> Customer.all.count
=> 3
El SQL generado es DELETE FROM `customers` WHERE (`customers`.`login` = 'foo')
Mira la documentation
8
ActiveRecord::Base.connection.execute('DELETE FROM table_name WHERE ...')
Creo que debe tener una columna de identificación única para que ActiveRecord funcione correctamente, pero no estoy 100% seguro.
Cuestiones relacionadas
- 1. Cómo destruir un registro con has_many,: dependent =>: destroy
- 2. Ruby on Rails: ¿cómo validar un modelo sin registro activo?
- 3. En rieles, ¿cómo destruir un elemento 'unirse a la tabla' sin eliminar el registro real?
- 4. ¿Cómo puedo copiar un registro, cambiando solo la identificación?
- 5. Rieles: búsqueda de clave externa sin identificación ActiveRecord
- 6. Ruby Activerecord IN cláusula
- 7. Nombre de la columna vacía al destruir el objeto
- 8. ¿Cómo puedo usar ActiveRecord en una base de datos que tiene una columna llamada 'válida'? (DangerousAttributeError)
- 9. cómo destruir Zend_Session_Namespace sin session_destroy
- 10. Rubí objeto # advertencias Identificación y Registro Activo
- 11. ¿Cómo puedo ignorar permanentemente una columna de base de datos en mi clase ActiveRecord :: Base?
- 12. ¿Cómo puedo obtener mi dispositivo de identificación de registro
- 13. carga de archivos sin activerecord
- 14. ¿Puedo hacer una columna JTable sin bordes?
- 15. ¿Puedo destruir una estructura en C++?
- 16. tipos de Ruby de colecciones en ActiveRecord
- 17. Cómo utilizar el registro activo sin rieles
- 18. ¿Cómo puedo almacenar en caché una columna calculada en rieles?
- 19. ¿Cómo puedo generar una imagen en Ruby sin dependencias externas?
- 20. Ruby on Rails: ¿Cómo hacer que ActiveRecord muestre la próxima identificación (última + 1)?
- 21. ¿Cómo puedo destruir objetos COM en C#?
- 22. Índices predeterminados en la columna de identificación?
- 23. Rieles: cómo agregar una columna BLOB utilizando ActiveRecord?
- 24. Ignorar columna 'solo lectura' en creaciones y actualizaciones en Ruby ActiveRecord
- 25. ¿Cómo puedo hacer que Ruby on Rails maneje errores de registro duplicados de MySQL?
- 26. ¿Cómo puedo determinar si una clase A hereda de la clase B sin instanciar un objeto A en Ruby?
- 27. Ruby Gem Development - Cómo utilizar ActiveRecord?
- 28. ¿Cómo vaciar/destruir una sesión en rieles?
- 29. Cómo actualizar un registro sin cambiar la versión de fila
- 30. cómo actualizar un registro sin preocuparse por la clave primaria
Este es el camino a seguir. Iba a responder esto. –
Esto no funciona en todos los casos. Tengo un juego modelo y un modelo AppVersion. El juego has_many: app_versions. 'Game.first.app_versions.delete_all' produce' DELETE FROM 'app_versions' WHERE 'app_versions'. '' = NULL', que es un error. –
Cuando usa esto en una relación, Rails 4.2 dice que en el método '.delete_all', solo hay dos opciones para pasar:': nullify' que establece null en foreing_keys y ': delete_all' que realmente elimina esos objetos. Y el valor predeterminado es ': nullify'. – mariowise