这是我要实现的目标的简化示例,对于Rails来说我还很陌生,并且努力使自己了解模型之间的关系。
我有两个模型,User
模型和Category
模型。用户可以与许多类别相关联。一个特定的类别可以出现在许多用户的类别列表中。如果删除了特定类别,则应在用户的类别列表中反映出来。
在此示例中:
我的Categories
表包含五个类别:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | 姓名| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | 体育| | 2 | 新闻| | 3 | 娱乐| | 4 | 技术| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的Users
表包含两个用户:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | 姓名| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | 用户A | | 2 | 用户B | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UserA可以选择“体育和技术”作为他的类别
用户B可以选择新闻,体育和娱乐
运动类别已删除,UserA和UserB类别列表均反映了删除
我开玩笑地创建了一个UserCategories
表,其中包含类别和用户的ID。通过这种方式,我可以查找类别名称,但是无法级联删除,因此整个解决方案似乎都是错误的。
我发现的使用belongs_to和has_many函数的示例似乎在讨论映射一对一关系。例如,对博客文章的评论。
- 您如何使用内置的Rails功能表示这种多对多关系?
- 使用Rails时,在两者之间使用单独的表格是否可行?
UserCategory
模型并没有错,在大多数情况下甚至都可取。您只需要使用User.has_many :categories, through: :user_categories
。也许可以找到一个更好的名字。