我使用jsonapi-serializer来序列化我的对象。
我想返回原始模型的slug
以及所有关联(关系)。
product_serializer.rb
class ProductSerializer < V1::BaseSerializer
set_id :slug
set_type :product
attributes :name, :description, :original_price_cents, :discounted_price_cents
belongs_to :seller
end
字符串
seller_serializer.rb
class SellerSerializer < V1::BaseSerializer
set_id :slug
set_type :seller
attributes :average_rating, :reviews_count, :total_sold_count, :name
end
型
问题是,与卖家的关联是返回卖家的ID。
"data": {
"id": "sleek-leather-keyboard-women-s-fashion-shoes",
"type": "product",
"attributes": {
"name": "Sleek Leather Keyboard",
"description": "Non qui est. Est quis molestiae.",
"original_price_cents": 7662,
"discounted_price_cents": 5103,
},
"relationships": {
"seller": {
"data": {
"id": "1",
"type": "seller"
}
},
}
},
型
我想隐藏卖家的id 1
从上面的React。我尝试了几件事,但似乎没有帮助。任何人有任何建议?
不起作用
class ProductSerializer
belongs_to :seller do |serializer, seller|
serializer.slug_for(seller)
end
private
def self.slug_for(relationship)
{ id: relationship.slug }
end
end
型
更新:
有一个id_method_name
,可以用来覆盖它。
belongs_to :seller, id_method_name: :slug
型
但它会选择产品的弹头,而不是卖家的弹头。
1条答案
按热度按时间ecbunoof1#
您面临的问题源于
jsonapi-serializer
如何处理关联。id_method_name
用于指定在父对象(在本例中为Product
)上调用哪个方法以获取关联的ID。但是,您希望在关联对象(Seller
)上调用该方法以获取其slug
作为ID。要解决此问题,您可以覆盖关联的默认行为。以下是解决方案:
1.在
ProductSerializer
中使用block
与belongs_to
关联。在块中,您可以显式定义关联的属性。通过指定关联的id
属性,您可以控制在序列化输出中将哪个值用作关联的ID。1.在块内部,调用关联
Seller
对象上的slug
方法以检索其slug
。下面是如何修改
ProductSerializer
来实现这一点:字符串
通过此更改,
belongs_to :seller
关联将在序列化输出中使用关联Seller
对象的slug
作为其ID。注意事项:确保
Product
模型与Seller
有关联(例如,Product
模型中的belongs_to :seller
),并且Seller
模型具有slug
属性或方法。