1

mongoid をバージョン 3.1.6 に更新したところ、reset_countersメソッドを使用してモデルの関係を追跡できるようになりました。しかし、gem の更新前と同じように、まだこのエラーが発生します。

undefined method `reset_counters' for Mongoid::Persistence::Atomic::Operation:Module

私の Gemfile には、次のバージョンがあります。

gem 'mongoid', '3.1.6'

また、Gemfile.lock は次のように述べています。

mongoid (3.1.6)
  activemodel (~> 3.2)
  moped (~> 1.4)
  origin (~> 1.0)
  tzinfo (~> 0.3.29)

カウンターを更新するモデルは次のとおりです。

class Presentation
  include Mongoid::Document
  include Mongoid::Timestamps

  belongs_to :operation, :inverse_of => :presentations, :counter_cache => true

  after_save :update_counter

  def update_counter
    self.operation_id_change.each do |e|
      Operation.reset_counters(e, :presentations) unless e.nil?
    end
  end
end

そして、カウンターフィールドがあるモデルは次のとおりです。

class Operation
  include Mongoid::Document
  include Mongoid::Timestamps

  field :presentations_count, type: Integer

  has_many :presentations, :inverse_of => :operation, dependent: :destroy
end
4

1 に答える 1

0

名前空間に問題があるようです。エラーをよく見ると、次のようになります。

undefined method ... for Mongoid::Persistence::Atomic::Operation:Module

ではなく、でreset_counters見つけることができないと不平を言っていることがわかります。3.1.6 のソースを見ると、.Mongoid::Persistence::Atomic::OperationOperationOperationlib/mongoid/persistence/atomic/operation.rb

の完全修飾名を指定する場合Operation:

def update_counter
  self.operation_id_change.each do |e|
    ::Operation.reset_counters(e, :presentations) unless e.nil?
  # ^^
  end
end

reset_counters次に、適切なOperationモジュールを呼び出します。

于 2015-02-20T19:49:42.787 に答える