Rails не откатывается и не обновляет атрибут - PullRequest
0 голосов
/ 14 октября 2019

В терминале (позже мне нужно добавить это в миграцию) я хочу обновить total_campaign_codes_amount, который представляет все коды кампании для каждой кредитной кампании. Это поле counter_cache, и для этого в терминале у меня есть такой скрипт:

CreditCampaign.all.each do |cc|
  cc.update!(
    total_campaign_codes_amount: cc.campaign_codes.count
  )
end

Я не получил никаких ошибок в моем sql, все должно работать, но эти значения не сохраняются в - total_campaign_codes_amount для каждой CreditCampaign показывает 0.

  CreditCampaign Update (0.2ms)  UPDATE "credit_campaigns" SET "updated_at" = $1 WHERE "credit_campaigns"."id" = $2  [["updated_at", "2019-10-14 15:26:54.010779"], ["id", 1]]
   (0.4ms)  COMMIT
   (0.2ms)  SELECT COUNT(*) FROM "campaign_codes" WHERE "campaign_codes"."credit_campaign_id" = $1  [["credit_campaign_id", 2]]
   (0.1ms)  BEGIN
  CreditCampaign Update (0.2ms)  UPDATE "credit_campaigns" SET "updated_at" = $1 WHERE "credit_campaigns"."id" = $2  [["updated_at", "2019-10-14 15:26:54.013239"], ["id", 2]]
   (0.2ms)  COMMIT
 => [#<CreditCampaign id: 1, amount: 0.25e3, interest_rate: 0.12e2, installment_amount: 0.1e3, duration_in_months: 24, start_date: "2019-10-10", end_date: "2019-11-10", created_at: "2019-10-10 14:54:27", updated_at: "2019-10-14 15:26:54", name: "Credit Campaign #1", total_campaign_codes_amount: 15, used_campaign_codes_amount: 6>, #<CreditCampaign id: 2, amount: 0.1e1, interest_rate: 0.1e1, installment_amount: 0.1e1, duration_in_months: 1, start_date: "2011-01-01", end_date: "2020-01-01", created_at: "2019-10-14 13:40:02", updated_at: "2019-10-14 15:26:54", name: "test", total_campaign_codes_amount: 10, used_campaign_codes_amount: 0>]

Я пытался использовать update_attributes! вместо update! и find_each вместо all.each, но безрезультатно.

1 Ответ

1 голос
/ 14 октября 2019

Вы не можете обновить столбец кэша счетчика в Rails, потому что он добавляется в список содержащих только модель атрибутов только для чтения через attr_readonly. Вместо этого вы должны использовать update_counters или reset_counters.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...