2017-06-14 1 views
0

Je joue avec le serveur API Rails et je suis en train de passer un objet JSON à la base de données, mais il continue donne une valeur nulle.Essayer de passer à la colonne hachage JSON postgres JSON résultats valeur null

Le schéma est simple:

create_table "notes", force: :cascade do |t| 
    t.string "title" 
    t.string "created_by" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.json  "clients" 
end 

Voici ce que je poste dans Postman

{ 
    "created_by": "1", 
    "title": "I'm another note", 
    "clients": { 
     "client1": { 
      "name": "name 1", 
      "role": "role 1" 
     }, 
     "client 2": { 
      "name": "name 2", 
      "role": "role 2" 
     } 
    } 
} 

et cela retourne

{ 
    "id": 14, 
    "title": "I'm another note", 
    "created_by": "1", 
    "created_at": "2017-06-14T10:52:00.226Z", 
    "updated_at": "2017-06-14T10:52:00.226Z", 
    "clients": null 
} 

Si je vous envoie les paires de clés client/valeur comme "clients": "some client" il écrira pas de problème. Est-ce que je ne fais que transmettre les mauvaises données dans Postman ou est-ce autre chose?

Répondre

1

Vos paramètres forts doivent être ajustés à attendre et passer un JSON.

Pour permettre une JSON avec toutes les clés pour être acceptée, vous devez définir note_params comme

def note_params 
    params.require(:mote).permit(:title, :created_by).tap do |white_list| 
    white_list[:clients] = params[:note][:clients].permit! if params[:note][:clients] 
    end 
end 
+0

fonctionne parfaitement, je vous remercie beaucoup! – oneWorkingHeadphone