我有一个带有一个jsonb字段的表。我希望该字段只有三个键,比如表模式是
name:string 多布:约会 personal_data:jsonb
我希望personal_data只有三个键 个人资料: { 母亲的名字: '', 父亲姓名: '', random_key:''
}
如果我尝试保存其他一些密钥,则应显示错误。我正在使用rails,任何方式来实现这个
答案 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: '' }
密钥匹配的优雅解决方案来自: