无法在rails 3中的缓存中转储匿名类#<Module -error

Sam*_*Sam 2 ruby ruby-on-rails ruby-on-rails-3

我得到无法转储匿名类错误.

我的模型中有以下方法.

 def seating_for(active)
   ln = cache(col("lu", active)) do
    self.seat_list_for(active).where(seat_id: self.seat_entries)
 end

 def seat_list_for(active)
   ex_id = Exc.id_by_symbol(active)
   self.row.exe.seats.where(ex_id: exc_id).first.seat_alloc_mem
 end
Run Code Online (Sandbox Code Playgroud)

我正在尝试缓存ln.我收到了一个错误.无法弄清楚是什么问题.

 can't dump anonymous class #<Module:0x00000007ab6088>
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/activesupport-3.2.14/lib/active_support/cache.rb:561:in `dump'
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/activesupport-3.2.14/lib/active_support/cache.rb:561:in `initialize'
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/redis-activesupport-3.2.4/lib/active_support/cache/redis_store.rb:34:in `new'
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/redis-activesupport-3.2.4/lib/active_support/cache/redis_store.rb:34:in `block in write'
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/activesupport-3.2.14/lib/active_support/cache.rb:520:in `instrument'
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/redis-activesupport-3.2.4/lib/active_support/cache/redis_store.rb:33:in `write'
 /home/#/.rvm/gems/ruby-2.0.0-p0@anon-ui/gems/activesupport-3.2.14/lib/active_support/cache.rb:299:in `fetch'
 /home/#/user/projects/app/#/lib/lib_utility.rb:15:in `cache'
 /home/#/user/projects/app/#/app/models/smthng.rb:566:in `seating_for'
Run Code Online (Sandbox Code Playgroud)

LIB/lib_utility.rb

module LibUtility
  module ClassMethods
    def col(p, l)
     //smthng
    end

   def cache(l, options={}, &b)
     Rails.cache.fetch(l, expires_in: 50.minutes, &b)
   end
  end

  def self.included(receiver)
    receiver.extend ClassMethods
  end

end
Run Code Online (Sandbox Code Playgroud)

需要指导??

xle*_*ras 16

问题是您尝试缓存ActiveRecord关系集合.这是不可能的.如果要缓存查询,则需要先将其设为数组

def seating_for(active)
  cache(col("lu", active)) do
    self.seat_list_for(active).where(seat_id: self.seat_entries).to_a
  end
end
Run Code Online (Sandbox Code Playgroud)