在 ruby​​ on Rails 中处理多对多关系的最简洁方法是什么?

发布于 2024-09-10 23:06:46 字数 315 浏览 7 评论 0原文

我有一个模型说用户,可以住在多个城镇(表示为另一个模型)。如果我创建一个新用户,我必须选择(并编辑)他们居住的不同城镇。由于时间限制,我经常会得到一个“比我想要的更黑客”的解决方案,涉及以下内容: http://blog.hasmanythrough.com/2006/4/20/many -多对多跳舞

有什么受SO欢迎的好解决方案吗?

干杯...

树懒型

I have one model say user, that can live in multiple towns (represented as another model). If I create a new user I have to choose (and edit) the different towns that they live in. Due to time constraints, I often end up with a "hackyier than I would like" solution involving something like: http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off.

Any nice solutions that are popular with SO?

cheers...

Slothishtype

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦亿 2024-09-17 23:06:46

has_and_belongs_to_many 关联就是针对这种情况而构建的。这是有关它的文档: http://apidock.com/rails/ActiveRecord/Associations /ClassMethods/has_and_belongs_to_many

否则,如果您需要存储有关关联本身的信息(城市表或用户表中不存在的字段,而是介于两者之间的字段),您可能只想设置两个并行的'has_many_through' 关联,并设置一个单独的 'user_city' 表。所以它将在用户表

has_many :user_cities
has_many :cities, :through => :user_cities

和城市表中

has_many :user_cities
has_many :users, :through => :user_cities

然后,您可以调用:user.cities,并获取用户居住的城市列表。

The has_and_belongs_to_many association was built for this very situation. Here is the documentation on it: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

Otherwise, if you need to store information abotu the association itself (fields that would not exist in the city table or the user table, but in between), you might just want to set up two, parallel 'has_many_through' associations, and set up a seperate 'user_city' table. So it would be in the user table

has_many :user_cities
has_many :cities, :through => :user_cities

and in the cities table

has_many :user_cities
has_many :users, :through => :user_cities

Then, you CAN just call: user.cities, and get a list of the cities the user lives in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文