Как я могу использовать RABL API из приложения?

Я работаю над раскрытием API с помощью RABL. Предоставление представлений достаточно просто, но я столкнулся с проблемой, когда мое собственное приложение использует эти представления.

Например, предположим, что у меня есть конечная точка http://example.com/api/articles, которая создает представление статей в формате JSON.

В моем действии ArticlesController#index я хочу отобразить представление (HAML), которое показывает список статей. Вместо того, чтобы дублировать логику из ArticlesApiController#index, я хочу просто использовать эти данные, т. е. я хочу сказать «получите эти данные из конечной точки /articles API», а затем передать эти данные в представление HAML.

Как я могу это сделать? Или это неправильный способ сделать это?


person Josh Leitzel    schedule 19.06.2012    source источник


Ответы (1)


Посмотрите этот скринкаст на RABL.

На ваш взгляд, вы можете добавить данные из RABL следующим образом (взято из примера railscast):

<div id="articles" 
   data-articles="<%= render(template: "articles/index.json.rabl") %>">

Примечание

Вы можете еще больше упростить доступ к данным, используя гем gon.

В вашем контроллере

def index
  @articles = Article.all 

  # initialize the JS variable upon HTML request
  gon.rabl if request.format == Mime::HTML

end

Теперь вы можете получить доступ к данным в javascript следующим образом:

alert(gon.articles)
person Harish Shetty    schedule 19.06.2012
comment
Спасибо за Ваш ответ! Но я пытаюсь избежать дублирования логики выяснения значения всех статей (даже если это тривиально). Мой API уже знает, что такое все статьи, и я хочу, чтобы мой контроллер просто извлекал их из API. Интересно, должен ли я просто сделать шаг назад и поместить логику всех статей в модель статей, а затем просто использовать ее как в API, так и в основном контроллере? - person Josh Leitzel; 20.06.2012
comment
Посмотрите на правку, которую я внес в действие контроллера. Нет дублирования логики. При выполнении HTML-запроса устанавливается переменная JS. Решение основано на предположении, что аутентификация/авторизация действия происходит в предварительных фильтрах. - person Harish Shetty; 20.06.2012
comment
ОП не спрашивает, как получить доступ к информации в javascript. Его приложение Rails использует внешний JSON API. Он хочет получить json из API, поместить его в какой-то объект и передать этот объект представлениям haml. Без большого дублирования или стандартного кода. - person Joe Van Dyk; 24.06.2012
comment
@JoeVanDyk, я не так интерпретирую. Действие index контроллера статей предоставляется как API. Когда пользователь вызывает одно и то же действие с расширением html, он хочет использовать свой собственный API, а не повторно принимать решения об авторизации. - person Harish Shetty; 24.06.2012