ruby-on-rails - 如何解决 Marshal.dump "no marshal_dump is defined for class Proc"错误

标签 ruby-on-rails ruby serialization

假设我有一个 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 实例本身。这确实意味着您必须为经过身份验证的请求执行数据库(或内存缓存)查找,但它可以为您省去大量序列化/缓存方面的麻烦,否则您将不得不处理这些问题。

另外,从某种意义上说,它不是“无效的”ProcProc 实例是 Ruby 代码和应用程​​序状态的容器,因此永远无法序列化。

关于ruby-on-rails - 如何解决 Marshal.dump "no marshal_dump is defined for class Proc"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668030/

相关文章:

javascript - 有没有办法重新生成 link_to_add_association(特别是数据关联插入模板)?

ruby-on-rails - 与 rails 集成的新 elasticsearch-ruby gem

ruby-on-rails - Rails 中什么时候使用符号?

javascript - 在 Javascript/Coffeescript/jQuery 中是否有与 Ruby 的发送等效的东西?

serialization - 在C#中控制序列化的顺序

java - Gson 自定义 byte[] 处理程序

ruby-on-rails - 使用 rspec 确保记录器被调用

Ruby:Gemfile 中的 'require: false' 是什么意思?

ruby - STDIN 的非阻塞读取线?

java - 何时覆盖 writeObject/readObject?