Creando una relación de muchos a muchos en Rails
Este es un ejemplo simplificado de lo que estoy tratando de lograr, soy relativamente nuevo en Rails y estoy luchando por entender las relaciones entre modelos.
Tengo dos modelos, elUser
model y @Category
modelo. Un usuario puede asociarse con muchas categorías. Una categoría particular puede aparecer en la lista de categorías para muchos usuarios. Si se elimina una categoría en particular, esto debería reflejarse en la lista de categorías para un usuario.
En este ejemplo
MiCategories
a tabla @ contiene cinco categorías:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | Sports | | 2 | News | | 3 | Entertainment | | 4 | Technology | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MiUsers
table contiene dos usuarios:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | UserA | | 2 | UserB | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UserA puede elegir Deportes y Tecnología como sus categorías
UserB puede elegir Noticias, Deportes y Entretenimiento
La categoría deportiva se elimina, las listas de categorías UsuarioA y UsuarioB reflejan la eliminación
He jugado con la creación de unaUserCategories
table que contiene los identificadores de una categoría y un usuario. Este tipo de trabajo funcionó, pude buscar los nombres de las categorías, pero no pude lograr que funcionara una eliminación en cascada y toda la solución parecía incorrecta.
Los ejemplos de uso de las funciones belong_to y has_many que he encontrado parecen discutir el mapeo de una relación uno a uno. Por ejemplo, comentarios en una publicación de blog.
¿Cómo representa esta relación de muchos a muchos utilizando la funcionalidad integrada de Rails? ¿Está usando una tabla separada entre los dos una solución viable al usar Rails?