2011-07-08 8 views
11

Bir değerlendirmenin parçası olarak kullanıcının cevapların listesini düzenlemesine izin veren bir rails3 formu var.Rails3 fields_for metin üzerinde Hash: beklendiği gibi çalışmıyor

uygulama/modelleri/assessment.rb:

class Assessment < ActiveRecord::Base 
    serialize :answers, Hash # answers is a t.text field used to store all answers. 
end 

uygulamayı/görünüşüdür/değerlendirmeler/new.html.erb:

<p>Initialized answers: <%= @assessment.answers %></p> 

<% item_counter = 0 %> 
<% form.fields_for :answers do |answer_fields| %> 
    <% item_id = "item" + item_counter.to_s %> 
    <% item_counter = item_counter + 1 %> 
    <div class="field"> 
     <%= answer_fields.label "the appropriate question, omitted for brevity" %> 
     <br/> 
     <% @assessment.answers[item_id] = "" %> 
     <%= answer_fields.text_field item_id, :value => @assessment.answers[item_id] %> 
    </div> 
<% end %> 

Her metin girişi oluşturmak için bir fields_for döngü kullanımı

SORUN:fields_for döngü sıfır yinelemeli, hiçbir alan yazdırılmaz.
("Başlatılan yanıtlar:" öğesinin doğru gösterilmesine rağmen: {"a" => 143, "b" => 42})

+0

bildiğim kadarıyla seni belki kendi yardımcı yazmalısınız bu yardımcı ile cevaplar için alanları işlemek için çalışıyoruz neden emin değilim bu yüzden AR modelleri arasında bir ilişki varken kullanılır için alanlar bildiği gibi kısmi – Bohdan

+0

@Bohdan: Bu gönderiye bakılırsa, mümkün görünmektedir: http://stackoverflow.com/questions/1002963#4809844 –

+0

bu yardımcının bir param olarak kabul edeceği anlaşılıyor ki, bunu <% formuna dönüştürebilirsiniz. fields_for @ assessment.answers do | answer_fields | %> '? – Bohdan

cevap

18

Bunu yapmalısınız. Yerel olarak test edildi.

<p>Initialized answers: <%= @assessment.answers %></p> 

<% @assessment.answers.each do |key, value| %> 
    <%= form.fields_for :answers, @assessment.answers[key] do |answer_fields| %> 
     <div class="field"> 
     <%= answer_fields.label key %> 
     <br/> 
     <%= answer_fields.text_field key, :value => value %> 
     </div> 
    <% end %> 
<% end %> 
+0

Teşekkürler! Ödül çok yakında biter, ben de kontrol edemeden kabul ediyorum. –

+0

Bu, aynı kurulumla çalışması için alınamadı. Buradaki cevabı kullanarak işleri bir şeyler yapmak için yönetilen: http://stackoverflow.com/questions/4899440/creating-a-form-with-unknown-fields-and-storing-those-fields-into-a-serialized -f –

+1

Kullanışlı posta için teşekkürler! Küçük düzeltme, raylarda 3 olmalıdır: <% = form.fields_for ...%> – cider

5

Hash to OpenStruct nesnesi sorunumu çözdü.

<% form.fields_for :answers, OpenStruct.new(answers) do |answer_fields| %> 
<% item_id = "item" + item_counter.to_s %> 
<% item_counter = item_counter + 1 %> 
<div class="field"> 
    <%= answer_fields.label "the appropriate question, omitted for brevity" %> 
    <br/> 
    <% @assessment.answers[item_id] = "" %> 
    <%= answer_fields.text_field item_id, :value => @assessment.answers[item_id] %> 
</div> 
+0

Aslında, bu cevap! Günümü kurtardın: D – MhdSyrwan

+0

Bu durumda bir OpenStruct kullanmak için güzel bir numara. Başarı ile bir hstore destekli alan ile kullanılır. –