Как я могу сделать уникальный запрос для `counter_cache` - PullRequest
0 голосов
/ 01 февраля 2019

Итак, у меня есть две модели 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, я не получаю уникальное числоПодписки.Мне нужно сделать количество подписок уникальным для пользователя (Lead).Как более четко организовать код?

1 Ответ

0 голосов
/ 01 февраля 2019

Я бы определил это как метод в классе подписки на кампанию, вместо того, чтобы пытаться использовать какой-нибудь встречный кеш.Я бы использовал кэш счетчика только в родительской модели, чтобы описать счет в простой один-ко-многим (может быть, с помощью фильтра ключ L: true), но не для подсчета связанных записей в той же таблице.Для этого используйте модельный метод:

def some_describing_method_name
  campaign.campaign_subscriptions.pluck(:lead_id).uniq.count
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...