Création de plusieurs formes imbriquées à l'aide de simple_form et les rails 4
Je suis en train de créer une application simple avec les modèles suivants:
catégories --[has_many]--> questions --[has_many]--> réponses
J'ai le code suivant pour créer des catégories + questions(categories/_form.haml.html):
= simple_form_for(@category) do |f|
= f.error_notification
= f.input :title, label: "Category title: "
= f.simple_fields_for :questions, @category.questions.build do |q|
= q.input :content, label: "Question content: "
= f.button :submit
Et je suis en utilisant tous le même code pour la création des questions + réponses(questions/_form.haml.html). J'ai toutes les relations, fort paramètres imbriqués attrs et les contrôleurs configuré, il fonctionne très bien pour moi.
Deux questions:
- Comment créer plusieurs questions d'categories/_form.haml.html?
- Comment créer une catégorie + questions à choix multiples + plusieurs réponses pour chaque question à la fois(dans categories/_form.haml.html)?
J'ai passé quelques heures à essayer de trouver comment accomplir la seconde et toutes les informations que j'ai pu trouver est liée à des Rails 3.0 et form_for. Aucun d'entre eux travaillaient pour moi.
La solution la plus simple ici doit être quelque chose comme:
= simple_form_for(@category) do |f|
= f.error_notification
= f.input :title, label: "Category title: "
= f.simple_fields_for :questions, @category.questions.build do |q|
= q.input :content, label: "Question content: "
= q.simple_fields_for :answers, q.questions.build do |a|
= a.input :content, label: "Answer content"
= f.button :submit
Mais il me donne
undefined method `questions' for #<SimpleForm::FormBuilder:
Ce qui me manque ici?
OriginalL'auteur user2876445 | 2013-10-13
Vous devez vous connecter pour publier un commentaire.
Vous vous êtes trompé ici:
= q.simple_fields_for :answers, q.questions.build do |a|
Vous appelez
questions
méthode sur un objet générateur deq
à la place d'un objet de modèle.Vous souhaiterez probablement à ceci:
OriginalL'auteur Edgars Jekabsons
je ne vais pas répondre aux deux premières questions que je pense qu'ils sont expliquées ici en profondeur: http://railscasts.com/episodes/196-nested-model-form-part-1
je veux juste vous donner quelques indications sur l'erreur. vous avez vraiment apprendre à lire les erreurs de messages et stacktraces si vous voulez devenir un professionnel.
voici donc une explication détaillée de l'erreur que les états
undefined method
questions" #tout d'abord, il est très important de fournir des informations complètes stacktraces. c'est parce qu'ils comprennent les numéros de ligne. numéro de ligne sont importants lors de la résolution de problèmes.
je suppose que la ligne en question ici est
= q.simple_fields_for :answers, q.questions.build do |a|
si vous regardez le message, il est dit que l'objet
q
est de typeFormBuilder
. c'est l'objet qui rails de instancie lorsque vous appelezform_for
oufields_for
. lorsque vous utilisez SimpleForm, il est également danssimple_form_for
etsimple_fields_for
, mais une version étendue (plus souvent appelé décoré de la version).cet objet
q
n'a pas une méthodequestion
et ne le sera jamais! je suppose que vous voulez accéder à l'objet sous-jacent que lafields_for
méthode des enveloppes. vous pouvez y accéder viaq.object
(voir ce post pour plus d'infos Rails à l'Aide de form_for et fields_for, comment voulez-vous accéder à la sous-objet, tandis que dans le fields_for bloc?).dans votre cas, j'ai aussi assumer un mélange de
answers
contrequestions
. je pense que cela devrait êtreq.simple_fields_for :answers, q.object.answers.build
au lieu deq.simple_fields_for :answers, q.questions.build
.OriginalL'auteur phoet