Rails 4独特的孙子计数

时间:2014-05-13 14:36:13

标签: ruby-on-rails

我在Rails 4中设置了一个包含四个模型的事件管理应用程序:

class Event < ActiveRecord::Base
  has_many :activities
end

class Activity < ActiveRecord::Base
  belongs_to :event
  has_many :registrations
  has_many :contacts, through: :registrations
end

class Registration < ActiveRecord::Base
  belongs_to :activity
  belongs_to :contact

class Contact < ActiveRecord::Base
  has_many :registrations
  has_many :activities, through: :registrations
end

我试图计算在活动中为任何活动注册的唯一联系人数。

我尝试在Event模型中创建一个方法:

def unique_contacts_count
  activities.contacts.distinct.count
end

但我为#34;联系人&#34;收到NoMethod错误我打电话的时候。

编码和轨道非常新,所以我欢迎任何方法。

3 个答案:

答案 0 :(得分:1)

activities.contacts不起作用,因为通过调用activites返回的内容是ActiveRecordRelation

我不是百分百肯定这会起作用或者是最好的答案,但你可以尝试在活动中添加这样的东西:

has_many :contacts, through: :activities

此外,您可以使用以下内容:

activities.joins(:contacts)取得了一些成功

答案 1 :(得分:0)

活动是活跃的记录模型吗?

如果不是,你将需要做这样的事情

Activity.find(:id).contacts.distinct.count

答案 2 :(得分:0)

一种天真的方法是

activities.collect(&:contacts).distinct.count