【发布时间】:2017-06-24 07:32:16
【问题描述】:
我有一张带有一个 jsonb 字段的表。我希望该字段只有三个键,例如表架构是
名称:字符串 出生日期:日期 个人数据:jsonb
我希望个人数据只有三个键 个人资料: { 母亲的名字: '', 父亲姓名: '', 随机键:''
}
如果我尝试保存其他密钥,它应该会显示错误。我正在使用rails,任何方式来实现这一点
【问题讨论】:
标签: ruby-on-rails postgresql jsonb
我有一张带有一个 jsonb 字段的表。我希望该字段只有三个键,例如表架构是
名称:字符串 出生日期:日期 个人数据:jsonb
我希望个人数据只有三个键 个人资料: { 母亲的名字: '', 父亲姓名: '', 随机键:''
}
如果我尝试保存其他密钥,它应该会显示错误。我正在使用rails,任何方式来实现这一点
【问题讨论】:
标签: ruby-on-rails postgresql jsonb
这将处理两个特定的键和任何随机的第三个键。如果您想要 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: '' }
密钥匹配的优雅解决方案来自:
【讨论】: