2016-06-18 24 views
0

In meinem Code versuche ich ein ActiveRecord-Modell dynamisch aus JSON zu instanziieren. Die Probe Json ist:Ruby from_json, um Objekt zu instanziieren - ID wird nicht ausgefüllt

{"id":10,"name":"XYZ"} 

Wenn ich versuche, von Ruby zu instanziiert:

file_name = "json_file.json" 
method = "name" 
klass = Kernel.const_get(method.classify) 
json = File.read(file_name) 
instance = klass.new.from_json(json) 

Aber wenn die Instanz des Typs Name erstellt wird, ist es nicht die id Wert aus dem JSON enthalten. Es ist null, während ich möchte, dass es wie angegeben 10 ist.

Wenn ich versuche, instance.save! einzufügen, dann erstellt es jedes Mal eine neue ID, was nicht das ist, was ich will.

Was könnte der Grund sein?

Antwort

0

In Rails kümmert sich ActiveRecord standardmäßig um die Zuweisung von Datensatz-IDs. Daher ignoriert Rails diesen Teil "id":10 Ihres JSON.

Was Sie tun müssen, ist dieses Standardverhalten von ActiveRecord zu überschreiben (idealerweise sollten Sie das nicht tun), wie würden Sie tun, dass ich nicht sicher bin, obwohl es etwas zu tun gibt, überprüfen Sie this question aus. This post könnte auch etwas Licht auf das Thema werfen. Viel Glück.

+0

Danke! Aber ich möchte, dass dieses Objekt unabhängig von seinen ActiveRecord-Grundlagen als eigenständiges Objekt agiert. – Sid

+0

Sie haben geschrieben: "Ich versuche, ein ActiveRecord-Modell dynamisch aus JSON zu instantiieren", richtig? Wenn Ihre Klasse also von ActiveRecord erbt, gelten die Standardwerte für Ihre Klasse. –