2

ich eine jbuilder zu verwenden ist versucht, eine JSON-Antwort für ein TypeCar Objekt in meiner Antwortein Objekts in einer jbuilder teilweise Rückkehr Abrufen von ‚Null‘, wenn es in einem Array gewickelt ist

class TypeCar < ActiveRecord::Base 
    attr_accessible :name 

    belongs_to :car_alias, foreign_key: :name, primary_key: :name, counter_cache: true 
    has_one :main_car, through: :car_alias, foreign_key: :name, primary_key: :name 

end 

Im json zu machen für die TypeCar teilweise, "Ansichten/api/type_cars/_type_cars.json.jbuilder",

json.extract! type_car, :name 

json.main_car Array.wrap(type_car.main_car) do |main_car| 
    json.partial! "api/main_cars/main_cars", main_car: main_car 
end 

Und das Haupt Auto Teil in "api/main_cars/_main_cars.json.jbuilder"

json.extract! main_car, :more_info, :name, :id 

die Ansicht, die _type_car Teilweise gibt die folgenden

{ 
name: test, 
main_car: [ 
{ 
more_info: "Lorem Ipsum", 
name: "New", 
id: 198 
} 
] 

Ich bin zu raten, dass die für das Hauptauto Attribut verwendet eine Hash in einem einzigen Objekt Array ist das Array aufgrund Einwickeln. Aber ich möchte das entfernen, da es eine zusätzliche Ebene der Verschachtelung ist, die nicht benötigt wird. Also würde ich einfach einen einfachen Hash anstelle eines Hash in einem Array bevorzugen.

Der Grund, warum ich das Objekt in ein Array wickeln musste und es zu einem Aufzählungszeichen übergeben musste, war, weil nichts anderes zu funktionieren schien. Diese

...

json.extract! type_car, :name 

json.main_car do 
    json.partial! "api/main_cars/main_cars", main_car: type_car.main_car 
end 

diesen Fehler gibt ...

undefined method `more_info' for nil:NilClass 

Und:

json.extract! type_car, :name 

json.main_car type_car.main_car do |main_car| 
    json.partial! "api/main_cars/main_cars", main_car:main_car 
end 

gibt diesen Fehler:

undefined method `map' for #<MainCar:> 

Selbst wenn man Dinge wie type_car.main_car.id innerhalb des Typs car partial testet, wird das Null-Problem zurückgegeben.

Wirklich zu schätzen all die Hilfe und Anleitung, danke!

Antwort

1

Gelöst es. Das Hauptautoobjekt war für einige type_car Objekte (duh!) Eigentlich nicht vorhanden.

So sollte es sein

json.main_car do 
    if type_car.main_car.present? 
    json.partial! "api/main_cars/main_cars", main_car: type_car.main_car 
    end 
end