使用Active Record Serializers格式化集合

时间:2015-09-17 15:29:41

标签: ruby ruby-on-rails-4 active-model-serializers

总计我有以下代码:

def search
  @regions = Region.search(params[:searchPhrase]).page(params[:current].to_i).per_page(params[:rowCount].to_i)
  data = {
    current: @regions.current_page, 
    rowCount: @regions.per_page,
    total: @regions.count,
    rows: @regions
  }
  respond_with(data)
end

这给了我一个输出:

{total: 20, current: 2, rowCount: 10, rows: [{id: 1, name: "Region"}, ...]}

这很好用,但我想在整个应用程序中使用相同的格式。

我已经阅读了一些有关ActiveModel Seralizers gem的内容,但我无法找到以下方法:

  • 使用自定义名称添加根。我知道我不能用AMS设置根,但我怎么命名呢?
  • 为CollectionSerializer添加密钥。我知道我可以使用meta,但我不想让键在另一个键下。我想要今天的输出。

有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

您可以像这样创建RegionSerializer

class RegionSerializer    
  attributes :current,
             :rowCount,
             :total,
             :regions

  def regions
    # get the regions here
  end
end

然后,在您的控制器中,您可以拥有以下内容:

  def search

    render(
        root: :your_custom_root_name,
        json: rows,
        each_serializer: RegionSerializer
    )
  end

  private

  def rows
    # get collection_of_objects/rows here
  end

您可以使用root选项指定root元素的名称和each_serializer选项,以指定用于渲染对象集合的序列化程序,如上所示。