假设我有一个 User < ActiveRecord::Base
.
现在,假设我想创建一个用户实例,验证它并在无法保存时将其存储在 session 中。
user = User.new
...
session[:new_user] = user unless user.save
...
使用 ActiveRecord session 可能会以 no marshal_dump is defined for class Proc
结束来自 Marshal.dump
.
现在,解决对象(通常不必是 AR)的此类序列化错误(找到“无效”Proc
对象)的最佳方法是什么?
最佳答案
通常最好在 session 中存储用户 id,而不是 User
实例本身。这确实意味着您必须为经过身份验证的请求执行数据库(或内存缓存)查找,但它可以为您省去大量序列化/缓存方面的麻烦,否则您将不得不处理这些问题。
另外,从某种意义上说,它不是“无效的”Proc
。 Proc
实例是 Ruby 代码和应用程序状态的容器,因此永远无法序列化。
关于ruby-on-rails - 如何解决 Marshal.dump "no marshal_dump is defined for class Proc"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668030/