Yuvalanmış model formum ilk seviye derinlerde harika çalışıyor. Ama kabul seviyesinde çok fazla seviyelere kabul edebileceğiniz izlenimi aldım. Accepts_nested_attributes_for. Ancak, aşağıdaki kodu denediğimde, "Görüntü" öznitelikleri üst düzey "Soru" modeline eklenir ve bilinmeyen bir öznitelik "Resim" hatasıyla form gönderiminde kırılır.Raylar 3 Nested Model Form, accepts_nested_attributes_for öğesini kullanarak 2 düzey derin kullanın
Form verilerini kullanarak ekleri el ile yapabilirim, ancak Raylar otomatik olarak işleyebilirse, açık nedenlerle daha iyi olur.
Neyi yanlış yapıyorum? Değişimi denedim | af | "için alanlar: resim yapmak" kendi benzersiz adına ama herhangi bir etkisi yoktu.
Modeller:
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
Denetleyici:
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
Görünüm:
= 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
Teşekkürler, bu sorunu çözdünüz. Şu anda sahip olduğum tek sorun, formu gönderdiğimde, "Soru sorusu boş bırakılamaz" form hatası alıyorum. Sanırım bunun nedeni, "Cevap" ın doldurulmayabilecekmiş gibi görünen soru_adı adlı gerekli bir alana sahip olmasından kaynaklanıyor. Herhangi bir fikir? – LennonR
Bu doğru. Bu gerçekleşiyor çünkü ana nesne ('Soru') yeni bir kayıttır ve bu nedenle bir alt nesne ('Cevap') kaydetmeye çalıştığınızda henüz mevcut değildir (yani bir kimliği yoktur). Doğrulamalarınızı question_id veya denetleyicinizde kaldırabilirsiniz, önce ana nesneyi ('@ question.save') sonra da çocukları ('@question.answers << @ answer') kaydedin. Bunun gibi bir şey ... Daha fazla bilgi için bu [makale] 'ya bakın (http://hobocentral.net/blog/2008/04/29/activerecord-behaviour-with-associations/). HTH – mbreining
Gerçekten bunu anlayamıyor mu? Aşağıdaki Railscast'te (Rails 2.3 için de olsa), yazar basit bir @ survey.new/@ survey.save ile yapmaya çalıştığım şeyi yapar. [link] (http://railscasts.com/episodes/196-nested-model-form-part-1) Onun için Rails az önce her şeyi düzeltti ve doğru dernek yaptı. Rails 3, artık bunu halletmiyor mu? İşte projesinin github kaynak kodu: [link] (https://github.com/ryanb/railscasts-episodes/tree/master/episode-196/surveysays) Yoksa farklı bir şey mi yapıyorum? – LennonR