Rabl / Will Paginate установочное имя корневого ребенка

Интересно, кто-нибудь может помочь. Я пытаюсь перенести нашу старую модель Rails #to_json для нашего API, чтобы упростить управление версиями в долгосрочной перспективе. Я борюсь за первое препятствие из-за Рабла и Уилла Пагината.

В настоящее время мы переопределяем WillPaginate::Collection#as_json

module WillPaginate
  class Collection

    alias :as_json_without_paginate :as_json   

    def as_json(options = {})

      # RABL seemingly passing JSON::Ext::Generator::State into as_json
      unless options.is_a?(Hash)
        options = {}
      end

      json = {
        :page => current_page
        :per_page => per_page,
        :total_entries => total_entries,
        :entries => as_json_without_paginate(options)
      }
    end

  end
end

Так что @collection.to_json вернет что-то вроде

{
  "total_entries": 1,
  "page": 1,
  "entries": [
    {
      "follow": {
      "id": 1,
      "name": "TEST"
      }
    }
  ],
  "per_page": 10
}

Однако, когда я пытаюсь сделать следующее в RABL

node(:page) {|m| @follows.current_page }
node(:per_page) {|m| @follows.per_page }
node(:total_entries) {|m| @follows.total_entries}

child(@follows => :entries) do
  # extends 'follows/show'
  attributes :id, :name
end

Имя ребенка автоматически устанавливается на "запись", я хочу, чтобы оно было "следовать", чтобы соответствовать нашему текущему API, но безуспешно.

{
  "total_entries": 1,
  "page": 1,
  "entries": [
    {
      "entry": {
      "id": 1,
      "name": "TEST"
      }
    }
  ],
  "per_page": 10
}

Может кто-нибудь дать мне какие-либо указатели. Я пытался отследить источник, и кажется, что имя корневого объекта для ребенка всегда подразумевается.

2 ответа

Я столкнулся с той же самой ошибкой, проблема, кажется, устанавливает false для object_root. Вот то же решение, которое я предложил в ответ на другой вопрос stackru: неверное имя дочернего корня в rabl и не может установить дочернее имя корня

child( {@follow => :entries}, {:object_root => false} ) do
   # extends 'follows/show'
   attributes :id, :name
end

Обратите внимание на круглые скобки "()" и фигурные скобки "{}".

Надеюсь это поможет. Это отлично работает в моем случае.

Добавление :object_root => false на ваш child Блок должен это сделать.

child(@follows => :entries, :object_root => false) do
  # extends 'follows/show'
  attributes :id, :name
end
Другие вопросы по тегам