2013-03-03 3 views
2

Je l'ai vu de nombreux exemples d'utilisation accepts_nested_attributes_for mais seulement certains d'entre eux pour JSON POST/PUT et aucun d'eux m'a aidé:/accepts_nested_attributes_for cinque JSON PUT (mise à jour)

Ma demande sera utilisée pour créer des formulaires. Donc, une forme a plusieurs form_rows et un form_row peut avoir beaucoup de choix (dans le cas où il s'agit d'une sélection de radio)

Donc, j'ai mon modèle de formulaire comme ceci:

class Form < ActiveRecord::Base 
    attr_accessible :name 
    has_many :form_rows 
    accepts_nested_attributes_for :form_rows 
end 

et mon contrôleur ressemble à ceci:

def update 
    @form = Form.find(params[:id]) 
    @form.update_attributes!(params[:form]) 
end 

Voici le JSON que je suis en train d'envoyer

{ 
    "name": "form test 4", 
    "form_rows_attributes": [ 
    { 
     "domtype": "Input", 
     "label": "Super row new" 
    } 
    ] 
} 

Dans mon scénario, la création de formulaire ne prend qu'un nom, c'est après cela que l'utilisateur ajoute les form_rows. Quand je fais cela, le nom est correctement mis à jour mais les form_rows ne sont pas du tout créés. Il n'y a pas d'erreur dans ma console, juste la mise à jour pour le formulaire.

Qu'est-ce que je fais mal?

Répondre

6

Votre JSON a besoin d'un niveau d'imbrication plus si l'appel params[:form] va effectivement trouver les params:

{ 
    "form": { 
    "name": "form test 4", 
    "form_rows_attributes": [ 
     { 
     "domtype": "Input", 
     "label": "Super row new" 
     } 
    ] 
    } 
} 
+0

J'ai essayé cela, mais seul le nom est mis à jour. Les form_rows ne sont pas ajoutés:/ – Olivier

+0

Oups désolé, ça marche, je le faisais mal. Cependant, j'ai toujours un problème. Mon form_row peut avoir beaucoup de choix mais un JSON comme ça { "forme": { "name": "forme test 4", "form_rows_attributes": [ { "domtype": "Input", "label" : "ligne super nouvelle", "choix": [ { "name": "choix 1", "valeur": "value1" } ] } ] } } ne fonctionne pas:/J'ai une erreur: ActiveModel :: MassAssignmentSecurity :: Erreur dans FormsController # mise à jour Impossible d'affecter en masse un attribut protégé es: choices – Olivier

+0

@Tagazok avez-vous quelque chose comme 'attr_accessible: choices' dans le modèle' FormRow'? Vous aurez également besoin de 'accepts_nested_attributes_for: choices' dans votre modèle' FormRow'. – patrickmcgraw

Questions connexes