Question

J'essaie d'implémenter des formes d'objet imbriquées pour mon site en utilisant comme guide le blog de Ryan Daigle ( http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes ). Pour une raison quelconque, les champs de formulaire imbriqués n'apparaissent pas dans la vue.

class Instruction < ActiveRecord::Base
  has_many :steps
  accepts_nested_attributes_for :steps
end

class Step < ActiveRecord::Base
  belongs_to :instruction
end

<% form_for @instruction do |instruction_form| %>
  <%= instruction_form.error_messages %>
  <p>
    <%= instruction_form.label :title %><br />
    <%= instruction_form.text_field :title %>
  </p>
  <p>
    <%= instruction_form.label :difficulty %><br />
    <%= instruction_form.text_field :difficulty %>
  </p>

<% instruction_form.fields_for :steps do |step_form| %>
    <%= step_form.label :explanation, 'Explanation: ' %>
    <%= step_form.text_field :explanation %>

<% end %>

  <p><%= instruction_form.submit "Submit" %></p>
<% end %>

Lorsque je change instruction_form.fields_for: étapes faire | étape_form | en instruction_form.fields_for: étape do | étape_form | , le formulaire est rendu mais lors de la soumission, je reçois un Erreur 'attribut inconnu: étape'.

Ce que je fais semble correspondre au tutoriel. Que dois-je vérifier? Merci.

Était-ce utile?

La solution

Que se passe-t-il dans votre contrôleur? Je n'ai pas encore lu le didacticiel et je n'arrive pas à l'arracher pour le moment (en bas?), Mais construisez-vous un objet en mémoire à remplir?

dans votre contrôleur, dans votre " nouveau " action, assurez-vous que vous êtes

@instruction = Instruction.new
@instruction.steps.build

Ceci instanciera une étape en mémoire sous la forme d'un "espace réservé". pour votre formulaire à remplir. . . du moins, c’est ce que je fais dans mon propre contrôleur lorsqu’on utilise un uses_nested_attributes_for , et cela fonctionne très bien.

Faites-moi savoir si cela fonctionne, et une fois que je pourrai consulter le didacticiel, il me faudra peut-être l'éditer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top