所以,我有两个模型Campaign
和CampaignSubscription
CampaignSubscription
模型
我有这种关系
belongs_to :campaign, inverse_of: :campaign_subscriptions, counter_cache: true, required: true
我没有唯一数量的订阅。
belongs_to :campaign, inverse_of: :campaign_subscriptions, required: true
counter_culture :campaign, column_name: proc { |model|
self.where(lead_id: model.lead_id, campaign_id: model.campaign_id).count > 1 ? nil : 'campaign_subscriptions_count' }
但是我认为这是错误的,并且会导致N + 1。
现在,当用户创建下一个CampaignSubscription对象时,我没有收到唯一数量的订阅。我需要使用户的唯一订阅数(领导)。如何更简洁地组织代码?
答案 0 :(得分:1)
我将其定义为广告系列订阅类上的一种方法,而不是尝试某种计数器缓存。我只会在父模型上使用计数器缓存来描述一个简单的一对多计数(可能使用发布为L:true的过滤器),而不是用于计数同一表中的相关记录。为此使用模型方法:
def some_describing_method_name
campaign.campaign_subscriptions.pluck(:lead_id).uniq.count
end