在葡萄实体中为循环应用别名
Apply alias for loop in grape entity
我想得到以下JSON。
[{"Product":{"CountryName":4848, }},{"Product":{"CountryName":700}]
module API
module Entities
class Example < Grape::Entity
expose(:product) do
expose(:country_name) do |product, options|
product.country.name
end
end
end
end
end
参数为产品和名称。我想要 return 产品,ProductName。
如何为 grape 中的循环元素应用别名 entity framework?
Product
属性:使用 'Product'
字符串代替 :product
符号,
CountryName
属性:您需要在您的实体中创建一个方法,该方法将 return product.country.name
并在您的实体中公开它。然后,使用别名,这样密钥就会像预期的那样 CountryName
(你可以看到 grape-entity documentation about aliases if need be)。
在你的例子中,这会给出:
module API
module Entities
class Product < Grape::Entity
expose 'Product' do
# You expose the result of the country_name method,
# and use an alias to customise the attribute name
expose :country_name, as: 'CountryName'
end
private
# Method names are generally snake_case in ruby, so it feels
# more natural to use a snake_case method name and alias it
def country_name
object.country.name
end
end
end
end
并且在您的端点中,您指定必须用于序列化 Products 实例的实体。在我的示例中,您可能已经注意到我冒昧地将实体重命名为 Product
,这将在端点中为我们提供:
# /products endpoint
resources :products do
get '/' do
present Product.all, with: API::Entities::Product
end
end
如预期的那样,应该会得到这种输出:
[
{ "Product": { "CountryName": "test 1" } },
{ "Product": { "CountryName": "test 2" } }
]
我想得到以下JSON。
[{"Product":{"CountryName":4848, }},{"Product":{"CountryName":700}]
module API
module Entities
class Example < Grape::Entity
expose(:product) do
expose(:country_name) do |product, options|
product.country.name
end
end
end
end
end
参数为产品和名称。我想要 return 产品,ProductName。
如何为 grape 中的循环元素应用别名 entity framework?
Product
属性:使用'Product'
字符串代替:product
符号,CountryName
属性:您需要在您的实体中创建一个方法,该方法将 returnproduct.country.name
并在您的实体中公开它。然后,使用别名,这样密钥就会像预期的那样CountryName
(你可以看到 grape-entity documentation about aliases if need be)。
在你的例子中,这会给出:
module API
module Entities
class Product < Grape::Entity
expose 'Product' do
# You expose the result of the country_name method,
# and use an alias to customise the attribute name
expose :country_name, as: 'CountryName'
end
private
# Method names are generally snake_case in ruby, so it feels
# more natural to use a snake_case method name and alias it
def country_name
object.country.name
end
end
end
end
并且在您的端点中,您指定必须用于序列化 Products 实例的实体。在我的示例中,您可能已经注意到我冒昧地将实体重命名为 Product
,这将在端点中为我们提供:
# /products endpoint
resources :products do
get '/' do
present Product.all, with: API::Entities::Product
end
end
如预期的那样,应该会得到这种输出:
[
{ "Product": { "CountryName": "test 1" } },
{ "Product": { "CountryName": "test 2" } }
]