-1

私は自分のサイト用のショッピングカートを作成していますが、RailsセッションとActiveRecordオブジェクトで1つの問題が発生しています。

ショッピングカートは、実際にはいくつかのOrderItemを持つ1つのOrderオブジェクトです。

Orderオブジェクトをセッションに追加した後、Dalliは次の例外の発生を開始しました。

Marshalling error for key 'sessions:9e67886e826819a3213df4f4c89db6e0': can't dump hash with default proc
You are trying to cache a Ruby object which cannot be serialized to memcached.
/home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/server.rb:277:in `dump'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/server.rb:277:in `serialize'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/server.rb:164:in `set'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/server.rb:48:in `request'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/options.rb:18:in `block in request'
    /home/rodrigo/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/options.rb:17:in `request'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/client.rb:251:in `perform'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/dalli/client.rb:120:in `set'
    /home/rodrigo/.rvm/gems/ruby-1.9.3-p125@netsabe-ecommerce/gems/dalli-2.1.0/lib/action_dispatch/middleware/session/dalli_store.rb:50:in `set_session'

グーグルで、ActiveRecordをセッションに保存できないことがわかりました。

では、このオブジェクトをセッションに保存するための最良の方法はどのようになっていますか?これらのクラスのシリアライズ/デシリアライズメソッドを実装する必要がありますか?

ありがとうございました!

編集1:

Orderオブジェクトはまだ永続化されていないことを覚えておいてください!

4

1 に答える 1

7

セッションにオブジェクトを格納することは悪い考えです。
Railsでのセッションへのオブジェクトの保存オブジェクトが最新の状態にあるかどうかを常に確認できるように、オブジェクトの
を保存することをお勧めします。id

于 2012-09-21T17:34:00.080 に答える