2013-08-14 12 views
2

В моем приложении rails я использую RABL, а на переднем конце я использую jquery datatables для просмотра списков данных (фактически используя угловые с директивой datatable).RABL с jquery Datatables

Я пытаюсь осуществить server side pagination которая требует несколько иного return tree

Там в good thread on a solution иметь дело с этим в самом RABL, но я предпочел бы иметь функцию в моем контроллере, обернутый результат RABL с дополнительными параметрами.

К примеру, в моем контроллере я предпочел бы

respond_with_datatable(@books) 

в то время как этот метод как-то вызывает метод respond_with (@books) и просто возвращает JSON массив Foo и в пределах этого метода я могу настроить соответствующий ответ:

{ 
"sEcho": 1, 
"iTotalRecords": 53, 
"iTotalDisplayRecords": 10, 
"aaData": [book_array] 
} 

Я не верю, что есть метод, который я могу назвать, который просто делает то, что respond_with (объект) делает и просто захватывает JSON, не отвечая. Преимущество использования метода в контроллере заключается в том, что мне не нужно менять RABL, и у меня есть некоторые случаи, когда я хочу вернуть дополнительный формат данных и другие случаи, когда я этого не делаю. Наличие контроля в контроллере идеально. Любая помощь приветствуется!

ответ

1

Вы можете использовать render_to_string, чтобы сделать свой шаблон RABL в строку, а затем обработать его оттуда. Например, вы можете разобрать его обратно в JSON, а затем манипулировать им или вставить его в более крупную структуру JSON. Затем вы можете использовать render для прямого ответа на ваши новые данные.

я только проверил это в моем приложении

def index 
    @galleries = Gallery.all # or whatever 
    respond_with_datatable 
end 

def respond_with_datatable 
    template_json = JSON(render_to_string) 
    json = {:new_data => "some new stuff", :orig_data => template_json} 
    render :json => json 
end 
Смежные вопросы