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
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.
Pour Rails 5, la bonne façon est de définir un attribut de données data: { type: :json }
.