J'essaie de créer un objet ActiveRecord via une requête JSON. Cependant, le contrôleur ne parvient pas à définir les variables passées dans les paramètres de l'objet nouvellement créé. Par exemple, un objet personne a deux champs: prénom et nom.Le contrôleur Rails n'accepte pas JSON?
Le JSON généré par la fonction JSON.stringify de la bibliothèque JSON.org produit:
{"firstname" : "Joe" , "lastname" : "Bloggs"}
Cependant, le contrôleur attend le JSON être sous la forme:
{ "Person" : {"firstname" : "Joe" , "lastname" : "Bloggs"} }
Je suis conscient que dans le cours normal des événements (pour les requêtes HTTP), les paramètres de la requête sont imbriqués sous le nom de classe du modèle en cours de création.
La création action dans le contrôleur est:
def create
@person = Person.new(params[:person])
respond_to do |format|
if @person.save
flash[:notice] = 'Person was successfully created.'
format.html { redirect_to(@person) }
format.xml { render :xml => @person, :status => :created, :location => @person }
format.json { render :json => @person, :status => :created, :location => @person }
else
format.html { render :action => "new" }
format.xml { render :xml => @person.errors, :status => :unprocessable_entity }
format.json { render :json => @person.errors, :status => :unprocessable_entity }
end
end
end
Quelle serait la façon la plus nette du contrôleur pour traiter les demandes JSON comme produit? Ou comment générez-vous des "JSON" JSON à partir d'objets Javascript pour les transmettre à vos contrôleurs?
TIA, Adam
Cela fonctionnerait-il toujours pour les requêtes HTML standard ou devrais-je refactoriser les requêtes JSON dans une méthode séparée? – apchester
Non. Vous devriez vraiment réécrire vos requêtes JSON pour transmettre le même type de paramètres que ceux qui seraient passés via HTML. –
Merci Zach, Je pensais autant, mais je voulais être sûr de la meilleure pratique. Cheers, Adam – apchester