2016-04-19 3 views
1

Disons que j'ai Modèle d'entraînement qui a beaucoup Article. Aussi L'entraînement accepte les attributs imbriqués pour Articles. En utilisant form_for Je veux envoyer des paramètres de élément dans un tableau de la manière suivante:Comment obtenir un tableau d'objets à partir du formulaire?

"workout"=>{"workout_title"=>"title", 
    "items"=>{ 
    ["name"=>"first item", "name"=>"second item"] 
    } 
} 

Mais pour quelque raison que je ne ai pu obtenir comme ça

"workout"=>{"workout_title"=>"title", 
    "items"=>{"name"=>"second_item"} 
} 

Comment puis-je résoudre ce?

Voici la forme qui produit les paramètres ci-dessus.

= form_for :workout, url: welcome_index_path, method: :post do |f| 
    = f.text_field :workout_title 
    = f.fields_for :items, child_index: 1 do |builder| 
    = builder.text_field :name 
    = f.fields_for :items, child_index: 2 do |builder| 
    = builder.text_field :name, id: 'workout_items_name_2', name: 'workout[items][name]' 
    = f.submit 'Go' 
+1

Vous ne mettez pas 'name: 'workout [items] [name]'' dans le premier 'builder.text_field' –

+0

@PetrGazarov dans ce cas, seul le second paramètre est également envoyé. –

+0

Enlevez le 'nom: 'workout [articles] [nom]'' et dans les paramètres forts donnez-le 'nom []'. – Pavan

Répondre

2

Pourquoi ne pas laisser le fields_for générer tous les articles pour vous? Il affichera les champs de texte pour tous vos articles dans @workout. En outre, vous recevrez des articles dans params[:workout][:item_attributes]. De plus, Rails '@post.save(params[:workout]) créerait également des éléments connexes.

+0

PG :: UndefinedTable: ERREUR: relation "items" n'existe pas. Cette erreur se produit lorsque j'ai changé: workout @ workout –

+0

L'erreur indique que vous n'avez pas de table "items". Dans votre question, vous avez mentionné que vous avez. Exécuter des migrations, je suppose. – Uzbekjon

+0

Dans ce cas, j'ai seulement la seule entrée qui envoie sur "workout" => {"workout_title" => "title"} –