2014-11-20 1 views
0

У меня есть нормальная связь в моем приложении Rails:Как вы обновляете counter_cache в rails 3?

  • CustomerAccount has_many :orders
  • Order belongs_to :customer_account

Теперь я добавил :counter_cache => true к belongs_to заявления и добавил orders_count столбец CustomerAccount

После миграции каждое значение в столбце orders_count равно 0. Как обновить все эти значения имеют правильное значение?

ответ

0

ли, как это в файле миграции:

class AddTasksCount < ActiveRecord::Migration 
    def self.up 
    add_column :projects, :tasks_count, :integer, :default => 0 

    Project.reset_column_information 
    Project.all.each do |p| 
     p.update_attribute :tasks_count, p.tasks.length 
    end 
    end 

    def self.down 
    remove_column :projects, :tasks_count 
    end 
end 
+0

Что именно 'reset_column_information' делать? –

+1

Модель CustomerAccount, а не Project. –

+0

Это просто пример @MaxWilliams ... – Kerozu

0

ли еще миграция, которая имеет следующие в его верхнем блоке:

CustomerAccount.all.each do |account| 
    account.update_attributes(:orders_count => account.orders.size) 
end 
1
CustomerAccount.find_each do |customer_account| 
    CustomerAccount.reset_counters(customer_account.id, :orders) 
end 
+0

Это лучше, чем у меня, я не знал о методе 'reset_counters'. –

+0

@MaxWilliams, вот почему мы здесь. Рад помочь вам, я многому научился от ваших ответов. –