Rails Counter Cache на той же модели?

У меня есть modelTaskи каждая задача has_many другие задачи:

Class Task < ActiveRecord::Base
  belongs_to :sub_task, class_name: Task.name, touch: true
  has_many :sub_tasks, class_name: Task.name, foreign_key: :sub_task_id, dependent: :destroy
end

Могу ли я добавить кеш счетчика к числу подзадач, которые есть в каждой задаче? Как?

1 ответ

Решение

Да, вы можете добавить счетчик кэша.

class Task < ActiveRecord::Base
   belongs_to :sub_task, class_name: Task.name, touch: true, counter_cache: :sub_tasks_count
   has_many :sub_tasks, class_name: Task.name, foreign_key: :sub_task_id, dependent: :destroy
end

Вам нужно создать миграцию, чтобы добавить новый столбец с именем sub_tasks_count к Tasks Таблица.

Нет необходимости делать то, что написал @Rubysmith, вы можете просто:

class Task < ActiveRecord::Base
  belongs_to :task, counter_cache: true
  has_many :tasks, dependent: :destroy
end

Миграция:

class AddTaskCounterToTasks < ActiveRecord::Migration
  def change
    add_column :tasks, :tasks_count, :integer, default: 0, null: false
  end
end
Другие вопросы по тегам