Rails 3 Formulaire de modèle imbriqué, 2 niveaux de profondeur en utilisant Accepts_nesed_attributes_For

StackOverflow https://stackoverflow.com/questions/5932934

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

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