如何修复jsonb字段中的键

时间:2017-06-24 07:32:16

标签: ruby-on-rails postgresql jsonb

我有一个带有一个jsonb字段的表。我希望该字段只有三个键,比如表模式是

name:string 多布:约会 personal_data:jsonb

我希望personal_data只有三个键 个人资料: {     母亲的名字: '',     父亲姓名: '',     random_key:''

}

如果我尝试保存其他一些密钥,则应显示错误。我正在使用rails,任何方式来实现这个

1 个答案:

答案 0 :(得分:0)

这将处理两个特定键和任意随机第三个键。如果您想要3个特定键,只需将第三个键添加到数组中(self ....)。count == 3而不是2

在yourmodel.rb上

before_save:check_personal_data

keys_to_always_match = [ :mothers_name, :father_name ]

def check_personal_data
  (self.personal_data.keys & keys_to_always_match).count == 2 && self.personal_data.count == 3 
end

您可能还想为迁移添加默认值:

t.jsonb :personal_data, default: { mothers_name: '', father_name: '', random_key: '' }

密钥匹配的优雅解决方案来自:

Testing if a hash has any of a number of keys