Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何修复jsonb字段中的键_Ruby On Rails_Postgresql_Jsonb - Fatal编程技术网

Ruby on rails 如何修复jsonb字段中的键

Ruby on rails 如何修复jsonb字段中的键,ruby-on-rails,postgresql,jsonb,Ruby On Rails,Postgresql,Jsonb,我有一个带有一个jsonb字段的表。我希望该字段只有三个键,比如表模式是 名称:string dob:日期 个人资料:jsonb 我希望个人资料只有三把钥匙 个人资料:{ 您的姓名:'', 父亲的名字:'', 随机密钥:“” } 如果我试图保存其他密钥,它将显示一个错误。我正在使用rails,任何实现这一点的方法都将处理两个特定键和任意第三个键。如果需要3个特定键,只需将第三个键添加到数组和(self…)。count==3而不是2 关于yourmodel.rb 保存前:检查个人数据 keys_t

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

名称:string dob:日期 个人资料:jsonb

我希望个人资料只有三把钥匙 个人资料:{ 您的姓名:'', 父亲的名字:'', 随机密钥:“”

}


如果我试图保存其他密钥,它将显示一个错误。我正在使用rails,任何实现这一点的方法都将处理两个特定键和任意第三个键。如果需要3个特定键,只需将第三个键添加到数组和(self…)。count==3而不是2

关于yourmodel.rb

保存前:检查个人数据

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: '' }
钥匙匹配的优雅解决方案来自:


好的,这是一个选项,根据我的情况,我还需要检查用户是否没有试图保存上面没有提到的任何其他密钥。我将用它更改为一个示例,但根据上面的信息,您应该能够推断出一种方法,with.count==3&&key1&&key2&&key3@gurpreetsingh我把它改成了更好的解决方案