tutorial software rails generate and ruby-on-rails ruby database

ruby-on-rails - software - ruby on rails tutorial



¿Puedo configurar la eliminación de Cascade en Rails? (5)

Contrariamente a la respuesta proporcionada, sugiero también hacerlo a nivel de base de datos. En caso de que tenga diferentes procesos o un entorno de múltiples hilos, podría suceder que los registros no se eliminen correctamente. Además, la clave externa de la base de datos hace las cosas mucho más rápido cuando se eliminan muchos datos.

Como en la respuesta sugerida haz esto:

has_many :memberships, dependent: :delete_all

Sin embargo, también asegúrese de configurar una foreign_key en una migración. De esta forma, la base de datos se encarga de eliminar los registros automáticamente.

Para anular los valores cuando se elimina una membresía, suponiendo que tiene un modelo de usuario:

add_foreign_key :users, :memberships, on_delete: :nullify

También puede eliminar todos los modelos cada vez que se elimine una membresía

add_foreign_key :users, :memberships, on_delete: :cascade

Sé que esto probablemente esté en Internet, pero no puedo encontrar la respuesta aquí en Stackoverflow, así que pensé que podría aumentar un poco la base de conocimientos.

Soy un novato en Ruby and Rails, pero mi empresa está muy involucrada, así que estoy tratando de conocerlo con un poco más de detalle.

Me ha resultado difícil cambiar mi forma de pensar al diseñar una aplicación desde el "modelo" en lugar de desde la base de datos, así que estoy tratando de descubrir cómo haría todo el trabajo de diseño que he hecho clásicamente en la Base de datos en el Modelo de rieles en su lugar.

¿Entonces la tarea más reciente que me he dado es descubrir cómo configurar un modelo de base de datos Rails para hacer eliminaciones en cascada? ¿Hay una manera fácil de hacer esto? ¿O tendría que entrar en MySql y configurar esto?

Gracias.

-Mate


Parece que este complemento podría darle lo que está buscando si desea que las eliminaciones en cascada se reflejen en la estructura de la base de datos real:

http://www.redhillonrails.org/foreign_key_migrations.html

El formato para usar esto en una migración sería algo como esto:

create_table :orders do |t| t.column :customer_id, :integer, :on_delete => :set_null, :on_update => :cascade ... end


Sí, puedes, si estás usando una relación como has_many simplemente haces esto

has_many :memberships, dependent: :destroy


Solo tenga en cuenta que delete_all no ejecutará ninguna devolución de llamada (como before_destroy y after_destroy) en los registros secundarios.


también puede establecer la opción: dependiente en: eliminar_todas. : delete_all emitirá una sola instrucción SQL para eliminar todos los registros secundarios. debido a esto, usar: delete_all puede brindarle un mejor rendimiento.

has_many :memberships, dependent: :delete_all