2012-09-03 3 views
0

Je regarde le railscasts et j'ai essayé d'écrire l'exemple de mes propres mains. Mais j'ai eu un problème avec l'étape de: Création du formulaire.Impossible de créer une association entre les nouveaux objets pour les modèles imbriqués dans les rails

Il faut créer une association entre enquête et question. Mais cette association ne peut être établie dans mon application rails donc pas de questions apparaissent sous la forme

Voici les codes

modèle d'enquête:

class Survey < ActiveRecord::Base 
    attr_accessible :name, :questions 
    has_many :questions, :dependent => :destroy 
    accepts_nested_attributes_for :questions 

end 

modèle Question:

class Question < ActiveRecord::Base 
    attr_accessible :context, :survey_id 
    belongs_to :survey 
end 

méthode Surveys_Controller:

# GET /surveys/new 
    # GET /surveys/new.json 
    def new 
    @survey = Survey.new 
    3.times {@survey.questions.build} 


    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @survey } 
    end 
    end 

partie question _form.html.erb

<% f.fields_for :questions do |builder|%> 
    <%= builder.label :context, "Question" %><br /> 
    <%= builder.text_area :context, :rows => 3 %> 
    <% end %> 

Voici ce que je suis arrivé de test dans la console

irb(main):010:0> @survey = Survey.new 
=> #<Survey id: nil, name: nil, created_at: nil, updated_at: nil> 
irb(main):011:0> 3.times {@survey.questions.build} 
=> 3 
irb(main):012:0> @survey.questions 
=> [#<Question id: nil, survey_id: nil, context: nil, created_at: nil, updated_a 
t: nil>, #<Question id: nil, survey_id: nil, context: nil, created_at: nil, upda 
ted_at: nil>, #<Question id: nil, survey_id: nil, context: nil, created_at: nil, 
updated_at: nil>] 
+0

Cela pourrait soyez à l'écart de votre problème, mais j'ai remarqué que vos valeurs 'attr_accessible' contiennent des': questions'. Pour les attributs imbriqués, cela devrait être ': questions_attributs' si je ne me trompe pas. – jordanandree

+0

Vous avez raison, mec. Il est utilisé avec mass_assignment. J'ai corrigé ce problème mais merci pour votre avis :) Mais je me demande s'il y a un problème de sécurité? – code4j

Répondre

0

haha, je suis stupide. C'est une question stupide. Peu importe l'association.

J'ai fait une faute de frappe sur

<%f.fields_for :questions do |builder|%>

il devrait revenir quelques textes à insérer dans le document HTML plutôt que le traitement sous forme de code Ruby

il devrait être <%=f.fields_for :questions do |builder|%>

Mais je vous remercie toutes vos réponses :)

1

Vous avez un nouvel objet pour le modèle. Vous créez 3 questions pour l'objet vide. Vos questions doivent être vides. Il n'est pas enregistré ou défini.

1

Si je comprends bien votre question, vous ne voyez pas de questions dans votre formulaire. Vous devez avoir un formulaire pour une question dans votre formulaire. Est-ce que vous faites des questions.que dans votre formulaire?

Vous avez besoin quelque chose comme:

<% survey.questions.each do |question| %> 
     <%= fields_for question do |builder| %> 
Questions connexes