Render Grape API в строку из представления

У меня есть API на основе Grape, настроенный в приложении Rails 4. Я хочу рендерить json, созданный одним из вызовов API, в представление во встроенном теге, в частности, чтобы сделать данные JSON доступными для представления angularjs, чтобы избежать (JSON API) обращение к серверу после загрузки страницы.

Есть идеи, как получить Grape API, преобразованный в строку?

/app/api/api.rb

class API < Grape::API
  version 'v1', using: :path
  format :json
  get '/dashboard' do
    ...
  end
end

представления/приборная панель/index.html.erb

<script>   
  <%= render some-way-to-render-to-text('/api/v1/dashboard.json') %>
</script>

Я мог бы использовать запрос get http, чтобы получить его, но я надеюсь избежать накладных расходов на вызов http. Я предпочитаю напрямую вызывать класс API.


person amolk    schedule 24.07.2013    source источник
comment
Пожалуйста, объясните, почему вы хотите это сделать, звучит как-то странно.   -  person Nicolas Garnil    schedule 25.07.2013
comment
Оптимизация. Страница панели инструментов построена с использованием angular.js — первое, что она делает, — это запрашивает панель инструментов.json с сервера и генерирует/отображает представление с использованием возвращенных данных. Но это вызывает один дополнительный запрос к серверу и замедляет рендеринг страницы. Я хочу отображать данные json встроенными при отображении страницы и использовать ng-init, чтобы angular.js не приходилось вызывать Dashboard.json. Опять же, это оптимизация для улучшения загрузки первой страницы.   -  person amolk    schedule 08.08.2013


Ответы (1)


Ваш erb-файл преобразуется в необработанный html перед отправкой клиенту. Ваш вызов API выполняется после этого, поэтому нет возможности получить ответ http и обработать его в ruby, потому что к этому моменту весь ruby ​​уже переведен в html.

То, что вы хотите сделать, это обработать его в angular. Оттуда вы можете использовать jquery, чтобы вставить его в DOM.

В angular вы должны сделать что-то вроде следующего в сервисе:

$http.get(....).success(//insert into DOM here)
person steeling    schedule 22.08.2014