Şu anda bir iç içe geçmiş model sayısı dinamik olan bir model için bir form oluşturmaya çalışıyorum. İç içe Formları kullanıyorum (RailsCasts 197'da açıklandığı gibi). İşleri daha da karmaşık hale getirmek için, iç içe geçmiş modellerimin her biri, formuna eklenmesini de istediğim üçüncü bir modelle bir has_one
ilişkisine sahiptir.has_many iç içe form, içinde bir has_one iç içe form ile
Normalleştirme veya uygun olmayan bir yaklaşım hakkında merak edenler için bu örnek, karşılaştığım sorunun basitleştirilmiş bir sürümüdür. Gerçekte, işler biraz daha karmaşıktır ve bu, almaya karar verdiğimiz yaklaşımdır.
Bazı örnek kod
aşağıda sorunu göstermek için:#MODELS
class Test
attr_accessible :test_name, :test_description, :questions_attributes
has_many :questions
accepts_nested_attributes_for :questions
end
class Question
attr_accessible :question, :answer_attributes
belongs_to :test
has_one :answer
accepts_nested_attributes_for :answer
end
class Answer
attr_accessible :answer
belongs_to :question
end
#CONTROLLER
class TestsController < ApplicationController
#GET /tests/new
def new
@test = Test.new
@questions = @test.questions.build
@answers = @questions.build_answer
end
end
#VIEW
<%= form_for @test do |f| %>
<%= f.label :test_name %>
<%= f.text_box :test_name %>
<%= f.label :test_description %>
<%= f.text_area :test_description %>
<%= f.fields_for :questions do |questions_builder| %>
<%= questions_builder.label :question %>
<%= questions_builder.text_box :question %>
<%= questions_builder.fields_for :answer do |answers_builder| %>
<%= answers_builder.label :answer %>
<%= answers_builder.text_box :answer %>
<% end %>
<% end %>
<%= link_to_add_fields 'New', f, :questions %>
<% end %>
Bu kod örneği Soru ilk örneği için tam çalışır. Sorun, oluşturulacak başka bir soru dinamik olarak eklendiğinde ortaya çıkar; cevap alanları görüntülenmiyor. Bunun, kontrolördeki ilk soru için oluşturulduğuna inanıyorum. Nested_attributes kullanarak bunu başarmanın bir yolu var mı?
Bu soru hakkında yanıltan insanlar için: nested_form gem öğesini ryanb'den kullanmayı düşünün. Bu harika link_to_add ve link_to_remove görünüm yardımcıları sağlayacaktır. –