Предположим, что у нас уже есть модели Article и Comment.

Задача: выводить счётчик комментариев к статье.

Сделаем следующее:

1). Создадим миграцию:

class AddCommentsCountToArticles < ActiveRecord::Migration[6.0]
  def change
    add_column :articles, :comments_count, :integer, default: 0
  end
end

2). Прогоним миграцию rails db:migrate

3). Создадим rake task:

Создайте файл lib/tasks/update_comments_count.rake

namespace :db do
  desc 'Update comments count'
  task update_comments_count: :environment do
    Article.reset_column_information
    Article.all.each do |article|
      Article.update_counters article.id, comments_count: article.comments.length
    end
  end
end

4). Добавим counter_cache для связи в модели Comment:

class Comment < ApplicationRecord
  belongs_to :article, counter_cache: true
end

5). Запустим таск:

rails db:update_comments_count

6). Добавим во view app/views/articles/show.html.erb

<h2>Comments (<%= @article.comments_count %>) :</h2>

Запустим приложение rails s, добавим комментарий, и счётчик обновится автоматически.


Yeah! Удачи. Автор статьи: @krdprog