Работают ли сериализаторы активных моделей с JSONP?

Если нет, как я могу сделать так, чтобы он был совместим с JSONP с моими запросами AJAX?

EDIT: Похоже, я не совсем понимаю, чего хочу достичь. Предположим, например, что у меня есть класс Post, который содержит такие атрибуты, как идентификатор, автор, теги и контент. Теперь для кодирования ответа JSON я бы использовал следующий ActiveModel::Serializer:

class PostSerializer < ActiveModel::Serializer
  attributes :id, :author, :tags, :content,
end

Теперь в контроллере я бы сделал что-то вроде

render :json => @post

для создания файла JSON, который выглядит так

{
  "posts": [
    {
      "id": 1,
      "author": "John Doe",
      "tags": "test",
      "content": "Hello world"
    }
  ]
}

Теперь моя цель здесь — использовать JSONP, чтобы, когда кто-то передает параметр jsoncallback в запросе (например, GET '/posts?jsoncallback=callback_function'), я мог бы сгенерировать следующее:

callback_function({
  "posts": [
    {
      "id": 1,
      "author": "John Doe",
      "tags": "test",
      "content": "Hello world"
    }
  ]
})

В настоящее время я использую to_json для объекта Post и сохраняю результат в переменной с именем @posts_json, затем указываю Content-Type как text/javascript в контроллере и отображаю файл html.erb, который выглядит следующим образом:

<% if params[:jsoncallback].blank? %>
<%= @posts_json.html_safe %>
<% else %>
<%= params[:jsoncallback] %>(<%= @posts_json.html_safe %>)
<% end %>

Я уверен, вы согласитесь, что это решение действительно уродливо, и проблема в том, что оно начинает доставлять мне проблемы из-за метода to_json, который я использую в контроллере.

Таким образом, я хотел бы использовать ActiveModel::Serializer для получения той же функциональности. Как я могу это сделать?


person Ki Chjang    schedule 18.02.2014    source источник
comment
Давайте посмотрим код...   -  person Severin    schedule 18.02.2014
comment
@Severin Готово... Я надеялся, что у AMS есть возможность сделать что-то вроде render json: @post, jsonp: callback_function   -  person Ki Chjang    schedule 19.02.2014


Ответы (1)


Таким образом, очевидно, что в обычном Rails синтаксис render уже обрабатывает обратные вызовы. Просто передайте callback: params[:jsoncallback] в качестве опции.

Нажмите здесь и просмотрите документацию в разделе Rendering JSON. .

person Ki Chjang    schedule 19.02.2014