如何通过多对多关系获取所有类型的集合

时间:2012-01-20 18:46:55

标签: ruby-on-rails ruby

我在写一些代码时遇到了一些麻烦(我可能会觉得很累),所以我需要一些帮助!

我有一个模型婚礼,它通过连接表有多个服务。这是一个多对多的关系。 每个服务都有一个特定的service_type。

基本上我可以这样做:

myWeddingObject.services.first.service_type

我的问题是,我希望能够直接获得所有可用于婚礼的服务类型。例如:

myWeddingObject.service_types

我的问题是,我是否有义务在我的婚礼模型中编写一个方法,我将获取所有服务并检查其类型然后收集它,还是有其他方式我最初没有看到?

我想在婚礼模型中写下类似的内容:

has_many :service_types, :through => :services

但是你可以假设,它不起作用。 我可能还需要添加另一个模型/ SQL表?

我希望我已经足够清楚并感谢你的帮助,我感激不尽!

1 个答案:

答案 0 :(得分:2)

简单的方法就是

wedding.services.map(&:service_type).uniq 

...将返回一组服务类型。如果你想要has_many:通过工作,那么你需要使service_type成为自己的模型。如果您想要添加和编辑大量服务类型,那么模型显然是可行的方法。如果它只是一个小的固定集,那么单独的模型可能有点过分。