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

Я использую 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

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

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

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

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

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

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

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

36
задан Chris 6 March 2012 в 12:05
поделиться