【发布时间】:2011-07-04 11:46:33
【问题描述】:
这是我想要实现的目标的简化示例,我对 Rails 比较陌生,并且正在努力理解模型之间的关系。
我有两个模型,User 模型和 Category 模型。一个用户可以与许多类别相关联。一个特定的类别可以出现在许多用户的类别列表中。如果删除了特定类别,则应将其反映在用户的类别列表中。
在这个例子中:
我的Categories 表包含五个类别:
我的Users 表包含两个用户:
用户A可以选择体育和科技作为他的类别
用户B可以选择新闻、体育和娱乐
运动类别被删除,UserA 和 UserB 类别列表都反映了删除
我已经尝试过创建一个UserCategories 表,其中包含类别和用户的ID。这种工作,我可以查找类别名称,但我无法让级联删除工作,整个解决方案似乎是错误的。
我发现的使用 belongs_to 和 has_many 函数的例子似乎讨论了映射一对一的关系。例如,博客文章中的 cmets。
- 如何使用内置 Rails 功能表示这种多对多关系?
- 在使用 Rails 时,在两者之间使用单独的表是一种可行的解决方案吗?
【问题讨论】:
-
其实使用
UserCategory模型并没有什么问题,在大多数情况下甚至是可取的。你只需要使用User.has_many :categories, through: :user_categories。也许,可以找到一个更好的名字。 -
对于其他人,这里有一个很好的关于这个主题的轨道:railscasts.com/episodes/47-two-many-to-many
标签: ruby-on-rails