2012-05-25 65 views
1

我不知道它是什么,但我似乎不能算出这个在HABTM协会统计项目

什么我坚持了是这样的,我有两个型号,其有一个HABTM协会对彼此。

class Event < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :events 
end 

所以当我创建一个事件时,有几个用户与它关联。假设用户1和2有3个他们一起参加的活动。现在我想要计算这些实例。所以我想让3号回到我身边。

我想这应该是简单的,但我不明白,有人可以指出我在正确的方向吗?提前致谢。

+0

你的问题还不清楚。你想要计算什么?用户或事件? “让我们假设用户1和2有3个他们一起参加的活动”涉及到“所以我想让3号回来”?请更清楚地解释你想要的。 – Mischa

+0

对不起,我不是很清楚。我试图写下一些不太复杂的东西。我猜这不是。我想计算(例如)用户1和用户2参加的事件。 – erroneousboat

回答

1

如果你想知道的常见事件的数量为两个用户,那么,没有花哨的SQL,你可以这样来做:

events1 = User.find(1).events.scoped 
events2 = User.find(2).events.scoped 

common_events_count = Event.where(id: events1).where(id: events2).count 
+0

非常感谢你,这正是我一直在寻找的! – erroneousboat

1

如果您要查找所有具有2个用户共同的事件,则可以查询所有事件,然后为每个用户过滤结果。

user1 = User.find(1) 
user2 = User.find(2) 
events = Event.all 
common_events = events.select {|e| e.users.include?(user1) and e.users.include?(user2)} 

变量common_events将包含user1和user2都参加的事件。

+0

感谢您的回复,您的两条建议都帮助我获得了我想要的结果! – erroneousboat