我有一个名为Content的模型,其中有一个名为dependencies的列,序列化为Hash:
class Content < ActiveRecord::Base
attr_accessible :dependencies
serialize :dependencies, Hash
end
过去几个小时,这真的让我神经紧张。我会感激任何帮助/提示。
问题:
提前致谢!
答案 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目的。