ROR:计数器缓存,has_many thougth,删除嵌套参数

时间:2017-03-07 09:29:01

标签: ruby-on-rails activerecord counter-cache

我有下一个型号:

class Document < ActiveRecord::Base
  has_many :sub_roles_documents, dependent: :destroy
  has_many :sub_roles, through: :sub_roles_documents,class_name: '::SubRole'
end

class SubRole < ActiveRecord::Base
  has_many :sub_roles_documents, dependent: :destroy
  has_many :documents, through: :sub_roles_documents, class_name: '::Document'
end

class SubRolesDocument < ActiveRecord::Base
  belongs_to :sub_role, counter_cache: :documents_count, touch: true
  belongs_to :document, counter_cache: :sub_roles_count
end

当我使用嵌套参数删除某些文件的sub_roles时,计数器缓存sub_roles_count不会改变,但是当我向文档中添加新的sub_roles时,所有工作都正常。 如果我直接删除文档的子文件documents.sub_roles.delete(specific_sub_role) - 它也可以正常工作。 在我的情况下,最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

我发现了一个问题,所有都写在文档中:

  

此选项可用于配置名为:counter_cache的自定义。当您在belongs_to关联上自定义:counter_cache的名称时,您只需要此选项。

在我的情况下,我必须写下:

class Document < ActiveRecord::Base
  has_many :sub_roles_documents, dependent: :destroy, counter_cache: :documents_count
  has_many :sub_roles, through: :sub_roles_documents,class_name: '::SubRole'
end

因为我使用自定义名称进行计数器缓存。