web-dev-qa-db-fra.com

Rails 3 formulaire distant: comment spécifier le type de contenu?

J'utilise Rails 3.2, j'ai un formulaire et je veux qu'il soit publié via ajax et que le contrôleur retourne json.

J'utilise un assistant form_for comme ceci:

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

Ma méthode de création de contrôleur d'objets ressemble à ceci:

  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

Le formulaire est soumis correctement comme prévu. Mais le contrôleur retourne du HTML, pas du JSON!

En inspectant la demande avec firebug et bien sûr, l'en-tête http Content-Type de la demande ajax est défini sur application/html.

La documentation à ce sujet est assez clairsemée: format =>: json semble simplement ajouter ".json" à l'action des formulaires, sans réellement modifier les en-têtes http.

J'ai également essayé: content_type =>: json sans effet.

Je ne peux pas simplement coder en dur le contrôleur pour retourner json car il y a d'autres endroits où je veux qu'il retourne du HTML ...

Est-ce que quelqu'un sait comment dire au contrôleur de rendre json lors de l'utilisation de form_for?

Merci pour toute aide

37
Chris

Vous pouvez définir le type de contenu avec:

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

Comme décrit dans Rails.js ligne 106.

53
spas

Pour Rails 5, la bonne façon est de définir un attribut de données data: { type: :json }.

documents JQuery UJS

4
Brian C