Il s'agit d'un exemple simplifié de ce que j'essaie de réaliser. Je suis relativement nouveau dans Rails et j'ai du mal à comprendre les relations entre les modèles.
J'ai deux modèles, le User
et le modèle Category
modèle. Un utilisateur peut être associé à de nombreuses catégories. Une catégorie particulière peut apparaître dans la liste des catégories pour de nombreux utilisateurs. Si une catégorie particulière est supprimée, cela doit se refléter dans la liste des catégories d'un utilisateur.
Dans cet exemple :
Mon Categories
contient cinq catégories :
\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| ID | Name |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1 | Sports |
| 2 | News |
| 3 | Entertainment |
| 4 | Technology |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mon Users
contient deux utilisateurs :
\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| ID | Name |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1 | UserA |
| 2 | UserB |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
L'utilisateur A peut choisir le sport et la technologie comme catégories.
L'utilisateur B peut choisir Nouvelles, Sports et Divertissement
La catégorie sport est supprimée, les listes de catégories de l'utilisateur A et de l'utilisateur B reflètent cette suppression.
J'ai envisagé de créer un UserCategories
qui contient les identifiants d'une catégorie et d'un utilisateur. Cela a fonctionné, j'ai pu consulter les noms des catégories, mais je n'ai pas réussi à faire fonctionner une suppression en cascade et la solution dans son ensemble m'a semblé mauvaise.
Les exemples d'utilisation des fonctions belongs_to et has_many que j'ai trouvés semblent traiter de la mise en correspondance d'une relation univoque. Par exemple, les commentaires sur un article de blog.
- Comment représenter cette relation de plusieurs à plusieurs en utilisant la fonctionnalité intégrée de Rails ?
- L'utilisation d'une table séparée entre les deux est-elle une solution viable avec Rails ?
0 votes
En fait, il n'y a rien de mal à utiliser
UserCategory
il est même souhaitable dans la plupart des cas. Il suffit d'utiliserUser.has_many :categories, through: :user_categories
. Mais on pourrait peut-être trouver un meilleur nom.1 votes
Pour les autres, il y a une bonne distribution de rails ici sur le sujet : railscasts.com/episodes/47-deux-many-to-many