我在Ruby on Rails中有以下ActiveRecord关联:
class Driver
has_one :car
delegate :tires, to: :car
end
class Car
belongs_to :driver
has_many :tires
end
class Tire
belongs_to :car
end
我有以下序列化器:
class DriverSerializer < ActiveModel::Serializer
attributes :id, :name
has_one :car
class CarSerializer < ActiveModel::Serializer
attributes :id
has_many :tires
class TireSerializer < ActiveModel::Serializer
attributes :id
end
end
end
生成的JSON看起来像这样:
{
"id": 1,
"name": "Bob",
"car": {
"id": 1,
"tires": [
{
"id": 1
},
{
"id": 2
}
...
]
}
}
但是我希望tires
向上移动一级,以便直接嵌套在driver
下面。我想按原样利用序列化器,而不使用Ruby的map
方法。我知道我能做到:
class DriverSerializer < ActiveModel::Serializer
attribute :tires
def tires
object.tires.map{|t| TireSerializer.new(t)}
end
end
但是,有没有更简单的方法来将哈希值向上移动一级?
1条答案
按热度按时间2sbarzqh1#
我认为最好在
Driver
模型中为tires
属性使用has_one :tires, through: :car
关联,而不是将其委托给:car
。然后,可以将DriverSerializer
中的has_many
选项用于此属性,并将TireSerializer
用于其序列化器。在Driver serializer中