0

こんにちは、クエリ結果を memcached にキャッシュしようとしていますが、オブジェクトが ActiveRecord::OrderedHash オブジェクトであるため、残念ながらできません。

result = Car.where(:brand => 'BMW').order(:model_name).group(:model_name).count(:model_name) 
#=> {'120d' => 23, '316i' => 3, '525d' => 50} which is a ActiveRecord::OrderedHash if i ask .class
Rails.cache.write('cached_result', result)

これにより、次のエラーが返されます。

キー 'cached_result' のマーシャリング エラー: デフォルト プロシージャでハッシュをダンプできません memcached にシリアル化できない Ruby オブジェクトをキャッシュしようとしています。/Users/nk/.rvm/gems/ruby-1.9.3-p194@au/gems/dalli-2.1.0/lib/dalli/server.rb:277:in `dump'

これを解決するためのベスト/最も簡単な方法は何ですか?

4

1 に答える 1

0

これはおそらくうまくいくはずです。このメソッドもオブジェクトではなくオブジェクトをto_hash返すため、別のルートを取る必要があります。OrderedHashHash

result = Car.where(:brand => 'BMW').order(:model_name).group(:model_name).count(:model_name)

# make a simple array of the OrderedHash and put it in a "normal" one
h = Hash[result.to_a]
h.class  # => Hash
于 2012-09-02T15:06:08.463 に答える