【问题标题】:Rails 6.1.4 counter_cache issueRails 6.1.4 counter_cache 问题
【发布时间】:2021-09-16 04:23:13
【问题描述】:

我开发了具有 Issue 和 IssueStep 模型的简单应用程序。 我不确定我是否错过了 counter_cache 的某些内容,因为对于使用自定义名称和 class_name 定义的关系,它无法按预期工作。

issue.steps.size - fire count() in DB, why? 
issue.issue_steps.size - uses counter_cache
issue.issue_steps_count - has correct values and I use it now
class IssueStep < ApplicationRecord
  belongs_to :issue, counter_cache: true
end

class Issue < ApplicationRecord
  has_many :steps, class_name: 'IssueStep', foreign_key: 'issue_id', dependent: :destroy
  has_many :issue_steps # added for test only 
end

【问题讨论】:

    标签: ruby-on-rails counter-cache


    【解决方案1】:

    这是你必须做的事情

    1. Issue表中的计数器列名称更改为steps_count
    2. IssueStep 模型中,将您的代码替换为以下代码
      belongs_to :issue, counter_cache: :steps_count
    

    现在您应该能够使用issue.steps.size 获取缓存值

    这是 Rails 查找缓存列名的方式:link to official source code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2021-09-29
      • 2022-08-20
      相关资源
      最近更新 更多