Удаленная форма Rails 3: Как мне указать тип контента? - PullRequest
35 голосов
/ 06 марта 2012

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

Я использую помощник form_for следующим образом:

= 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

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

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

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

Я также пробовал: content_type =>: json безрезультатно.

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

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

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

Ответы [ 2 ]

49 голосов
/ 06 марта 2012

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

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

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

3 голосов
/ 01 августа 2017

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

Документы JQuery UJS

...