2

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 

この問題についてのアイデアはありますか?

4

1 に答える 1

3

私はこれと同じことに遭遇しました。これが私のために働いたものです。

これらのクラスが既にアプリにあり、後で 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

誰かがこれを行うためのより簡単でクリーンな方法を持っているなら、それは素晴らしいことです.

于 2013-03-05T19:24:08.723 に答える