Mongoid 3.1.0 CounterCache не работает

Я пытаюсь использовать Mongoid CounterCache, но он не работает.

Я пытался просто использовать

belongs_to  :user, counter_cache: true

Но это возвращается

Problem:
Invalid option :counter_cache provided to relation :user.

Summary:
Mongoid checks the options that are passed to the relation macros to ensure that no ill side effects occur by letting something slip by.

Resolution:
Valid options are: autobuild, autosave, dependent, foreign_key, index, polymorphic, touch, class_name, extend, inverse_class_name, inverse_of, name, relation, validate, make sure these are the ones you are using.

Итак, я добавил

include Mongoid::CounterCache

Перезапустил мой веб-сервер, затем попытался снова, но он возвращает

uninitialized constant Mongoid::CounterCache 

Есть идеи по этой проблеме?

1 ответ

Я столкнулся с этим же. Вот что сработало для меня.

Допустим, у вас уже есть этот класс в вашем приложении, и вы решили добавить counter_cache позже. Таким образом, вы добавляете counter_cache: true в ваш детский класс

class User
    include Mongoid::Document
    field :name, type: String
    has_many :things
end

class Thing
    include Mongoid::Document
    field :name, type: String
    belongs_to :user, counter_cache: true
end

Затем вы запрыгиваете в консоль и делаете это:

u = User.first
u.things.count #=> 10
u.things_count #=> NoMethodError: undefined method things_count
User.update_counters(u.id, things_count: u.things.count)
u.reload
u.things_count #=> 10

Если у кого-то есть более простой или чистый способ сделать это, это было бы здорово.

Другие вопросы по тегам