Rails 3 Formulaire de modèle imbriqué, 2 niveaux de profondeur en utilisant Accepts_nesed_attributes_For
-
30-10-2019 - |
Question
Mon modèle de modèle imbriqué fonctionne très bien au premier niveau. Mais j'avais l'impression que vous pouviez aller de nombreux niveaux en profondeur en utilisant Accepts_neted_attributes_for. Mais lorsque j'essaie le code ci-dessous, les attributs "image" sont attachés au modèle "Question" de niveau supérieur et il se casse lors de la soumission de formulaire avec une erreur "image" d'attribut inconnu.
Je pourrais faire les inserts à la main en utilisant les données de formulaire, mais si les rails peuvent le gérer automatiquement, ce serait mieux pour des raisons évidentes.
Qu'est-ce que je fais mal? J'ai essayé de changer | af | Dans les "champs pour: Image do" à son propre nom unique, mais il n'a eu aucun effet.
Des modèles:
class Question < ActiveRecord::Base
has_one :answer
accepts_nested_attributes_for :answer
end
class Answer < ActiveRecord::Base
belongs_to :question
has_one :image
accepts_nested_attributes_for :image
end
class Image < ActiveRecord::Base
belongs_to :answer
end
Manette:
def new
@question = Question.new
answer = @question.build_answer
image = answer.build_image
@case_id = params[:id]
render :layout => 'application', :template => '/questions/form'
end
def create
question_data = params[:question]
@question = Question.new(question_data)
if @question.save
...
end
Voir:
= form_for @question, :html => {:multipart => true} do |f|
= f.label :text, "Question Text:"
= f.text_area :text, :rows => 7
%br
%br
=f.fields_for :answer, do |af|
= af.label :body, "Answer Text:"
= af.text_area :body, :rows => 7
%br
%br
= f.fields_for :image do |af|
= af.label :title, "Image Title:"
= af.text_field :title
%br
= af.label :file, "Image File:"
= af.file_field :file
%br
= af.label :caption, "Image Caption:"
= af.text_area :caption, :rows => 7
= hidden_field_tag("case_id", value = @case_id)
= f.submit
Pas de solution correcte