在 jbuilder partial return 'nil' 中检索对象,除非它被包裹在数组中

Retrieving an object in a jbuilder partial return 'nil' unless it is wrapped in an array

我正在尝试使用 jbuilder 为我的响应中的 TypeCar 对象呈现 json 响应

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

在 json 中,对于 TypeCar 部分,"views/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

而主车偏在"api/main_cars/_main_cars.json.jbuilder"

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

使用_type_car部分的视图,returns以下

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

我猜测 for main car 属性是单个对象数组中的散列,因为它包装了数组。但我想删除它,因为它是不需要的额外一层嵌套。所以我更喜欢普通散列而不是数组中的散列。

我必须将对象包装在数组中并将其传递给可枚举对象的原因是因为似乎没有其他方法有效。

这个...

json.extract! type_car, :name

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

给出这个错误...

undefined method `more_info' for nil:NilClass

还有这个:

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

出现此错误:

undefined method `map' for #<MainCar:>

甚至在类型汽车部分 returns 中尝试 type_car.main_car.id 之类的问题。

非常感谢所有的帮助和指导,谢谢!

解决了。一些 type_car 对象实际上不存在主要汽车对象(duh!)。

应该是

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