Rails:当“联系人”是多态的时,我如何计算用户拥有的联系人总数?

时间:2014-12-27 19:33:00

标签: ruby-on-rails ruby activerecord polymorphic-associations rails-models

我有一个名为Contacts的模型,它通过Contactable与其他模型相关联。

class Contact < ActiveRecord::Base  
  belongs_to :user
  belongs_to :contactable, polymorphic: true
  validates :email, :presence => {:message => 'Email cannot be blank'}

&#34; Leadhooks&#34;是其中一个模型&#34; Contacts&#34;与使用可联系人有关。

class Leadhook < ActiveRecord::Base
  belongs_to :user
  has_many :contacts, as: :contactable

这是我的用户模型......

class User < ActiveRecord::Base
  has_many :leadhooks
  has_many :contacts, through: :contactable

在我的应用的分析页面中,我想显示用户拥有的所有联系人的总数。

但是,由于联系人没有直接关联到用户,并且通过其他模型关联为contactable,因此当我尝试@user.contacts.all时,我收到了此错误...

ActiveRecord :: HasManyThroughAssociationNotFoundError at /找不到关联:可联系模型用户

如何计算用户通过其他模型关联每个Contact时的联系人总数?

2 个答案:

答案 0 :(得分:1)

你的问题并不完全清楚。

如果您只想运行user.contacts,则需要将其添加到User模型中:

has_many :contacts

但是,如果您想要通过其contactablesuser连接的所有contacts的计数,则需要将以下内容添加到User } model:

has_many :contactables, through: :contacts

由于contactable是多态关联,您可以可选指定contactable_type,如下所示:

has_many :contactables,
         through: :contacts,
         source: :contactable,
         source_type: "SomeClassName"

有了这个,你就可以user.contactables

答案 1 :(得分:0)

你添加了

has_many :contacts, :as => :contactable

到您的用户模型?

在这种情况下,您可以拨打@user.contacts.all

顺便说一句..你在帖子中混合commentscontacts ......