【问题标题】:How to fix keys in a jsonb field如何修复jsonb字段中的键
【发布时间】:2017-06-24 07:32:16
【问题描述】:

我有一张带有一个 jsonb 字段的表。我希望该字段只有三个键,例如表架构是

名称:字符串 出生日期:日期 个人数据:jsonb

我希望个人数据只有三个键 个人资料: { 母亲的名字: '', 父亲姓名: '', 随机键:''

}

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

【问题讨论】:

    标签: ruby-on-rails postgresql jsonb


    【解决方案1】:

    这将处理两个特定的键和任何随机的第三个键。如果您想要 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

    【讨论】:

    • 好的,这是一个选项,根据我的情况,我还需要检查用户是否没有尝试保存上面未提及的任何其他密钥
    • 我将使用它更改为示例,但从上面的信息中您应该能够推断出一种方法,使用 .count == 3 && key1 && key2 && key3跨度>
    • @gurpreetsingh 我已将其更改为更好的解决方案
    猜你喜欢
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2021-10-19
    • 2017-01-06
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多