How to fix an 'ArgumentError: Cannot infer root key from collection type. Please specify the root or each_serializer option, or render a JSON String'
How to fix an 'ArgumentError: Cannot infer root key from collection type. Please specify the root or each_serializer option, or render a JSON String'
我正在将一个对象传递给序列化程序,其中 return 是所有记录,当对象 return 的空数组是出现此错误的时间。
def booked_cars
if params["id"].present?
@customer = Customer.find(params["id"].to_i)
@booked_cars = @customer.bookings.where(cancelled: false).collect{|c| c.used_car}
render json: @booked_cars, each_serializer: UsedCarSerializer
end
end
我希望它给出对象数组或空数组,而不是给出参数错误(ArgumentError(无法从集合类型推断根键。请指定根或 each_serializer 选项,或呈现 JSON 字符串):)
尝试添加 serializer
选项或 root
选项,如 active_model_serializer 的错误响应中所指定。
因为序列化程序从集合中获取根。
@customer = Customer.find(params["id"].to_i)
render json: @customer
在上述情况下,序列化程序将像下面这样响应,
{
"customer": #root
{
# attributes ...
}
}
因为对象不是集合,所以根是单数形式(customer).
@customers = Customer.where(id: ids) # ids is an array of ids.
render json: @customer
在上述情况下,序列化程序将像下面这样响应,
{
"customers": #root
{
# attributes ...
}
}
因为对象不是集合,所以词根是复数形式(customers).
序列化程序将根据对象(ActiveRecord || ActiveRecordCollection) 的class 添加根。
如果对象为空数组序列化程序无法预测将哪个用作根。所以我们需要指定root或serializer选项。
render json: @customer, root: 'customer'
或
render json: @customer, serializer: UsedCarSerializer
注意:活动模型序列化程序从对象的 class 或序列化程序选项中检测序列化程序。
我正在将一个对象传递给序列化程序,其中 return 是所有记录,当对象 return 的空数组是出现此错误的时间。
def booked_cars
if params["id"].present?
@customer = Customer.find(params["id"].to_i)
@booked_cars = @customer.bookings.where(cancelled: false).collect{|c| c.used_car}
render json: @booked_cars, each_serializer: UsedCarSerializer
end
end
我希望它给出对象数组或空数组,而不是给出参数错误(ArgumentError(无法从集合类型推断根键。请指定根或 each_serializer 选项,或呈现 JSON 字符串):)
尝试添加 serializer
选项或 root
选项,如 active_model_serializer 的错误响应中所指定。
因为序列化程序从集合中获取根。
@customer = Customer.find(params["id"].to_i)
render json: @customer
在上述情况下,序列化程序将像下面这样响应,
{
"customer": #root
{
# attributes ...
}
}
因为对象不是集合,所以根是单数形式(customer).
@customers = Customer.where(id: ids) # ids is an array of ids.
render json: @customer
在上述情况下,序列化程序将像下面这样响应,
{
"customers": #root
{
# attributes ...
}
}
因为对象不是集合,所以词根是复数形式(customers).
序列化程序将根据对象(ActiveRecord || ActiveRecordCollection) 的class 添加根。
如果对象为空数组序列化程序无法预测将哪个用作根。所以我们需要指定root或serializer选项。
render json: @customer, root: 'customer'
或
render json: @customer, serializer: UsedCarSerializer
注意:活动模型序列化程序从对象的 class 或序列化程序选项中检测序列化程序。