rspec序列化哈希 - 查询为空记录

时间:2013-12-24 08:39:44

标签: ruby-on-rails rspec sqlite

我有一个名为Content的模型,其中有一个名为dependencies的列,序列化为Hash:

class Content < ActiveRecord::Base
  attr_accessible :dependencies
  serialize :dependencies, Hash
end

过去几个小时,这真的让我神经紧张。我会感激任何帮助/提示。

问题:

  • 迁移中的默认(空)值应该是什么?
  • FactoryGirl中的默认值(空)应该是什么?
  • 最重要的 - 如何查询以查找空值?

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

迁移中的默认(空)值应该是多少?   什么应该是FactoryGirl中的默认(空)值?

在这两种情况下,空哈希{}

  

最重要的 - 如何查询以查找空值?

由于序列化值是使用YAML存储的,因此您需要按如下方式进行搜索:

Content.where('dependencies = ?', {}.to_yaml)

这是我对上述测试的irb转录:

MacbookAir1:so1 palfvin$ rails c
Loading development environment (Rails 4.0.0)
2.0.0-p247 :001 > u = User.new(role: {})
 => #<User id: nil, role: {}, role2: nil> 
2.0.0-p247 :002 > u.save
   (0.3ms)  begin transaction
  SQL (3.3ms)  INSERT INTO "users" ("role", "role2") VALUES (?, ?)  [["role", "--- {}\n"], ["role2", nil]]
   (1.1ms)  commit transaction
 => true 
2.0.0-p247 :003 > u.role
 => {} 
2.0.0-p247 :004 > {}.to_yaml
 => "--- {}\n" 
2.0.0-p247 :005 > u
 => #<User id: 4, role: {}, role2: nil> 
2.0.0-p247 :006 > User.where(role: {}.to_yaml)
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."role" = '--- {}
'
 => #<ActiveRecord::Relation [#<User id: 3, role: {}, role2: nil>, #<User id: 4, role: {}, role2: nil>]> 
2.0.0-p247 :007 > 

(注意:我在发布此答案的第一个版本之前创建了一个用户实例(#3),这也是我where中出现的原因。

这是我的user.rb文件:

class User < ActiveRecord::Base

    has_many :who_rated_comment_rels, foreign_key: "user_id", dependent: :destroy
    serialize :role, Hash
    serialize :role2

end

您可以忽略与您的案例无关的内容(即role以外的任何内容)。我讨论这个项目的各种StackOverflow目的。