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