我在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错误我打电话的时候。
编码和轨道非常新,所以我欢迎任何方法。
答案 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