J'ai une application Rails 4 qui utilise Voici mon contrôleur: P> postgreSQL code>. J'ai aussi un Backbone.js Code> Application qui pousse JSON STRY> à l'application Rails 4. 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
3 Réponses :
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> 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"
}
}
Votre kilométrage peut varier, mais j'ai corrigé un problème smilaire par un code de bande dessinée comme celui-ci: Le problème particulier que j'avais était que si je faisais juste Utilisation de ce petit extrait de code ci-dessus est bien sûr, bien sûr, un pansement, mais il livre. P> espère que cela aide. p> p> JSON.PARSE code> 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 code> 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. p>
convertir hachage dans JSON en utilisant to_json code> p>