2009-05-04 9 views
0

Je tente d'implémenter des formulaires d'objets imbriqués pour mon site, en utilisant le blog de Ryan Daigle comme guide (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.Problèmes avec les champs de formulaire imbriqués apparaissant

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 %> 

Quand je change instruction_form.fields_for :steps do |step_form| à instruction_form.fields_for :step do |step_form|, la forme rend, mais sur présentation, je reçois un « attribut inconnu: étape » erreur.

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

Répondre

2

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

dans votre contrôleur, dans votre « nouveau » l'action, assurez-vous que vous êtes

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

Cela instancier un Step en mémoire comme un « espace réservé » pour votre formulaire à remplir. . . au moins c'est ce que je fais dans mon propre contrôleur lors de l'utilisation d'un accepts_nested_attributes_for, et il fonctionne très bien.

Laissez-moi savoir si cela fonctionne, et une fois que je peux tirer le tutoriel je dois modifier ce

+0

Je savais que je devais @instruction = Instruction.new ne savait pas que je devais faire @instruction .steps.build. En revenant sur le tutoriel, j'ai réalisé que j'aurais dû lire la section «extras». Merci pour l'aide! – sutee

+0

fantastique! c'était un coup dans le noir, mais c'était la chose étrange que j'ai remarquée quand j'ai commencé à utiliser accept_nested_attributes_for acclamations! – BushyMark

Questions connexes