Подтвердить что ты не робот

Удаленная форма Rails 3: Как указать тип содержимого?

Я использую Rails 3.2, у меня есть форма, и я хочу, чтобы она была отправлена ​​через ajax и вернул контроллер json.

Я использую form_for helper, например:

= form_for(@object, :remote => true, :format => :json) do |f|
....

Мой метод создания контроллера объектов выглядит следующим образом:

  def create
    respond_to do |format|
      if @object.save
         format.html { redirect_to @object }
         format.json { render json: @object, status: :created, location: @object }
      else
        format.html { render action: "new" }
        format.json { render json: @object.errors, status: :unprocessable_entity }
      end
    end
  end

Форма отправляет ajaxly, как ожидалось. Но контроллер возвращает html, а не json!

Проверка запроса с помощью firebug и достаточно уверен, что заголовок http-типа Content-Type для ajax-запроса устанавливается в application/html.

Документация вокруг этого довольно редкая: format = > : json, кажется, просто добавляет ".json" к действию форм, а не фактически модифицирует любые заголовки http.

Я также пробовал: content_type = > : json без эффекта.

Я не могу просто запрограммировать контроллер для возврата json, поскольку есть другие места, где я хочу, чтобы он возвращал html...

Итак, кто-нибудь знает, как сообщить контроллеру отобразить json при использовании form_for?

Спасибо за любую помощь

4b9b3361

Ответ 1

Вы можете установить тип содержимого с помощью:

= form_for(@object, :remote => true, :html => {:'data-type' => 'json'})

Как описано в rails.js строке 106.

Ответ 2

Для Rails 5 правильным способом является установка атрибута данных data: { type: :json }.

JQuery UJS docs