2013-08-07 3 views
1

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

В настоящее время мы переопределять WillPaginate :: Коллекция # 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 

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

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

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

ответ

0

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

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

Я столкнулся с такой же точной ошибкой, кажется, что проблема связана с установкой object_root в false. Здесь то же самое решение, которое я предложил в ответ на другой вопрос StackOverflow: wrong child root name in rabl and can't set child root name

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

Примечание как круглые скобки «()» и фигурные скобки «{}».

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

Смежные вопросы