加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用默认值和新对象的Rails序列化

发布时间:2020-12-17 02:13:35 所属栏目:百科 来源:网络整理
导读:另一个铁路 serialization问题.我已经阅读了很多这些,但找不到我的问题的答案,所以这里是: 我有典型的: class User ActiveRecord::Base serialize :prefs,Hash 在我的迁移中(感谢this问答): add_column :user,:prefs,:text,default: { foo: 'bar' }.to_ya
另一个铁路 serialization问题.我已经阅读了很多这些,但找不到我的问题的答案,所以这里是:

我有典型的:

class User < ActiveRecord::Base
  serialize :prefs,Hash

在我的迁移中(感谢this问答):

add_column :user,:prefs,:text,default: { foo: 'bar' }.to_yaml

现在,当我加载现有用户时:prefs被反序列化:

User.first.prefs[:foo] # returns 'bar'
User.first.prefs.class # returns Hash
User.first.prefs       # returns {:foo => "bar"}

所以它完美无缺!但是当我创建一个新的:

User.new.prefs[:foor]  # TypeError: can't convert Symbol into Integer
User.new.prefs.class   # returns String
User.new.prefs         # returns "---n:foo: barn"

是否可以在没有任何这些的情况下使其工作?

> after_initialize:方法
>像default_value_for这样的宝石
>重写初始化

我真的想让它只使用数据库默认.难道我做错了什么?

解决方法

当我在Rails控制台(Rails 3.2.6,Ruby 1.9.3-p194)中执行以下操作时:

u=User.new(:prefs=>{:foo2=>"bar2"})

我回来了:

=> #<User id: nil,name: nil,prefs: {:foo2=>"bar2"},created_at: nil,updated_at: nil>

所以我认为这是你想要的语法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读