2017-06-24 6 views
0

Ich habe eine Tabelle mit einem jsonb Feld. Ich möchte, dass Feld onlye drei Schlüssel haben, sagen, dass das TabellenschemaWie man Schlüssel in einem jsonb Feld repariert

Name ist: string dob: Datum PERSONAL_DATA: jsonb

i PERSONAL_DATA wollen nur drei Tasten PERSONAL_DATA haben: { mothers_name: ' ‘, father_name: '', random_key: '

}

', wenn ich versuche, einen anderen Schlüssel zu speichern, sollte es einen Fehler zeigen. Ich benutze Schienen, um diese zu erreichen

Antwort

0

dies wird zwei spezifische Schlüssel und beliebige dritte Schlüssel behandeln. Wenn Sie 3 bestimmte Tasten wollen nur den dritten Schlüssel zum Array hinzufügen und (Selbst ....) zählen == 3 statt 2

Auf 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 

Sie werden wahrscheinlich wollen auch einen Standardwert für die Migration hinzuzufügen:

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

die elegante Lösung für die Schlüsselanpassung kommt aus :

Testing if a hash has any of a number of keys

+0

OK, die eine Option ist und wie pro meiner Situation brauche ich auch, wenn der Benutzer zu überprüfen, keine anderen Schlüssel zu speichern versuchen, die nicht erwähnen oben –

+0

I wird ich ändern zu einer Probe mit dem sind, aber aus den oben genannten Informationen sollten Sie in der Lage sein, einen Weg zu tun, mit .count == 3 && key1 && key2 && key3 –

+0

ja ich kann herausfinden, dass von mir danke :) –