0

我想获得以下 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

参数是产品和名称。我想退回产品,ProductName。

如何为葡萄实体框架中的循环元素应用别名?

4

1 回答 1

1
  • Product属性:使用'Product'字符串而不是:product符号,
  • CountryName属性:您需要在您的实体中创建一个方法,该方法将返回product.country.name并在您的实体中公开它。然后,使用别名以使密钥符合CountryName预期(如果需要,您可以查看有关别名的葡萄实体文档)。

在您的情况下,这将给出:

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" } }
]
于 2018-04-04T11:32:04.007 回答