7
votes

JSON Decoder le problème du paramètre

J'ai une application Rails 4 qui utilise postgreSQL code>. J'ai aussi un Backbone.js Code> Application qui pousse JSON STRY> à l'application Rails 4.

Voici mon contrôleur: P>

def create
 @product = Product.new(ActiveSupport::JSON.decode product_params)

 respond_to do |format|
  if @product.save
    format.json { render action: 'show', status: :created, location: @product }
  else
    format.json { render json: @product.errors, status: :unprocessable_entity }
  end
 end
end
def product_params
  params.require(:product).permit(:title, :data)
end


0 commentaires

3 Réponses :


0
votes

L'erreur vous indique que ActiveSupport :: json.decode espère être fourni avec une chaîne, mais est incapable de contraindre l'argument que vous lui fournissez dans une chaîne. L'argument qui y est fourni ici est "Product_Params" qui renvoie un acteController :: Paramètres (un hachage enveloppé de manière lâche).

Si vous utilisez la backbone de style "hors de la boîte", il n'est pas nécessaire de décoder ce qui est affiché à cette action. Il suffit de changer l'action en: p> xxx pré>

la structure de votre méthode de votre produit_Params indique que l'action s'attend à ce que les données qui affichent ressemblent à ceci: P>

{
  product: {
    title: "Foo",
    data: "bar"
  }
}


0 commentaires

9
votes

Votre kilométrage peut varier, mais j'ai corrigé un problème smilaire par un code de bande dessinée comme celui-ci: XXX

Le problème particulier que j'avais était que si je faisais juste JSON.PARSE sur les paramètres qui contenaient l'objet que je voulais créer, je reçois cette erreur lors du test de l'unité, mais le code fonctionnait simplement bien lorsque mes formulaires Web soumettaient les données. Finalement, après avoir perdu 1 heure sur l'enregistrement de toutes sortes de choses stupides, j'ai réalisé que mes tests d'unité passaient en quelque sorte le paramètre de la requête dans une forme "pure" - à savoir l'objet était un hachage déjà, Mais lorsque mes formes Web (ou mes tests manuels sans tête via CURL) ont fait pression sur les données, les paramètres étaient comme vous vous attendez - une représentation de chaîne d'un hachage.

Utilisation de ce petit extrait de code ci-dessus est bien sûr, bien sûr, un pansement, mais il livre.

espère que cela aide.


0 commentaires

3
votes

convertir hachage dans JSON en utilisant to_json


0 commentaires