Можно ли использовать counter_cache с has_many? - PullRequest
5 голосов
/ 22 февраля 2012

Я работаю над добавлением counter_cache к моим моделям:

Пользователи (id, org_id) Orgs (id, users_count)

Но появляется следующая ошибка: ArgumentError (Unknown key(s): counter_cache):

class Org < ActiveRecord::Base
   has_many :users, :counter_cache => true

class User < ActiveRecord::Base
   belongs_to :org

Любые идеи, что неправильно настроить.Я хотел бы, чтобы Org.users_count возвращал counter_cache для числа пользователей в этой организации?

1 Ответ

15 голосов
/ 22 февраля 2012

Так не работает.Вы должны переместить counter_cache в значение own_to:

class User < ActiveRecord::Base
   belongs_to :org, :counter_cache => true
end

и добавить поле users_count в модель Org, после чего Rails обновит это поле для вас.Не забудьте добавить :default=> 0 в миграцию, иначе она не будет работать нормально.

Если в вашем приложении уже есть какие-то данные и вы хотите синхронизировать счетчик, вы можете запустить (послемиграция) что-то вроде следующего:

  Org.find(:all).each do |o|
    Org.update_counters o.id, :users_count => o.users.count
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...