`
a420144030
  • 浏览: 83904 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于rails 序列化Hash的问题

阅读更多

Making Rails' Serialize Even Better

Rails has this handy method that allows you store almost any object in the database with ease. Most often I end up using it for storing optional attributes in a hash.

Here is the proper syntax for telling Rails that there is an options attribute that should only store Hash values.

class User < ActiveRecord::Base
  serialize :options, Hash
end

The problem

The options attribute will start off as nil, and remain nil until you set it to something else. Setting the class_name to Hash only affects what you can write to this attribute.

>> user = User.new
=> #<User id: nil, name: nil, options: nil>
>> user.options[:theme]
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
	from (irb):2
=> nil

The solution

What we really need is to automatically return an empty Hash on this new object so we can go on our merry way.

Add this to your environment.rb.

config.gem 'jqr-typed_serialize', 
  :lib => 'typed_serialize', 
  :source => 'http://gems.github.com'

Now run this command to install the gem.

$ rake gems:install

A quick change of our model will fix all of our woes.

class User < ActiveRecord::Base
  typed_serialize :options, Hash
end
>> user = User.new
=> #<User id: nil, name: nil, options: nil>
>> user.options[:theme]
=> nil
>> user.options
=> {}
我使用上面方法出现安装出现问题, 后来发现可以用 gem install typed_serialize 解决
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    rails-settings:使用Ruby on Rails管理设置

    Ruby gem通过将ActiveRecord实例的设置作为序列化的Hash存储在单独的数据库表中来处理ActiveRecord实例的设置。 包括命名空间和默认值。 要求 Ruby 2.4或更高版本 Rails 4.2或更高版本(包括Rails 6) 安装 将gem...

    Ruby的25个编程细节(技巧、实用代码段)

    3. `use_standard_json_time_format` 设置为 `true`,使JSON序列化的时间和日期使用ISO8601格式。 4. 不对JSON中的HTML实体进行转义,保留原始格式。 以上内容涵盖了给定文件中的25个编程细节中的部分细节,这些...

    hashie-model:哈希 + ActiveModel 3.x

    ActiveModel是Ruby on Rails框架的一部分,它提供了许多与模型相关的功能,如验证(Validation)、序列化(Serialization)、属性访问(Attribute Access)等,而无需创建完整的数据库模型。ActiveModel 3.x版本包含...

    ruby初学者教程(对初学者很有帮助)

    - **应用场景**:Ruby在Web开发领域尤其是通过Ruby on Rails框架的应用更为广泛;Python则在科学计算、数据分析等领域拥有更强的优势。 #### 二、Ruby编程环境搭建 **2.1 安装Ruby** - **Windows平台**:可以通过...

    hdu题目分类

    8. **1008 University 简单hash** - **知识点**: 散列表、哈希函数。 - **描述**: 实现一个简单的哈希表。 - **难度级别**: 中等。 - **解题思路**: 设计哈希函数,并处理冲突。 9. **1009 目标柏林 简单模拟题...

    ruby基础知识

    - **序列化**:将对象的状态转换成字节流或文本格式,以便存储或传输。 - **YAML**:一种轻量级的数据交换格式,易于阅读和编写,支持嵌套数据结构。 以上是对Ruby基础知识的一些概述,希望对你有所帮助。Ruby作为...

    Ruby常见面试题.pdf

    - **Web开发**:尤其是通过Ruby on Rails框架。 - **脚本编写**:用于自动化任务和系统管理。 - **原型设计**:快速构建概念验证。 - **数据分析**:虽然不如Python普及,但在特定领域有应用。 - **游戏开发**:用于...

    java开源包1

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包11

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包2

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包3

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包6

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包5

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包10

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包4

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包8

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包7

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包9

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

    java开源包101

    nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...

Global site tag (gtag.js) - Google Analytics