2011-07-08 12 views
11

मेरे पास एक रेल 3 फॉर्म है जो उपयोगकर्ता को मूल्यांकन के हिस्से के रूप में उत्तरों की सूची संपादित करने की अनुमति देता है।
मैं एक fields_for पाश का उपयोग प्रत्येक पाठ इनपुट उत्पन्न करने के लिए:टेक्स्ट पर फ़ील्ड 3 फ़ील्ड हैश: अपेक्षित काम नहीं कर रहा है

एप्लिकेशन/मॉडल/assessment.rb:

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

एप्लिकेशन/देखें/आकलन/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 %> 

PROBLEM:fields_for लूप शून्य पुनरावृत्ति करता है, कोई फ़ील्ड मुद्रित नहीं होता है।
("प्रारंभिक उत्तर:" के बावजूद सही तरीके से दिखा रहा है: {"a" => 143, "बी" => 42})

+0

जहाँ तक मैं के लिए उपयोग किया जाता है आप एआर मॉडल के बीच एक रिश्ता है जब इतना मुझे यकीन है कि तुम क्यों हो सकता है आप अपने खुद के सहायक लिखना चाहिए इस सहायक के साथ जवाब के लिए खेतों रेंडर करने के लिए कोशिश कर रहे हैं नहीं कर रहा हूँ क्षेत्रों पता है या आंशिक – Bohdan

+0

@ बोहडन प्रस्तुत करें: यह संभव है, इस पोस्ट से निर्णय लेना: http://stackoverflow.com/questions/1002963#4809844 –

+0

ऐसा लगता है कि यह सहायक संग्रह को एक पैरा के रूप में स्वीकार करता है जिसे आप इसे <<% रूप में बदल सकते हैं। fields_for @ मूल्यांकन.answers करते हैं | answer_fields | %> '? – Bohdan

उत्तर

18

ऐसा करना चाहिए। स्थानीय रूप से परीक्षण किया।

<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

धन्यवाद! बक्षीस बहुत जल्द समाप्त होता है, इसलिए मैं जांच कर सकने से पहले स्वीकार करता हूं। –

+0

इसे एक ही सेटअप के साथ काम करने के लिए नहीं मिला। यहां जवाब में तकनीक का उपयोग करके चीजों को काम करने के लिए प्रबंधित किया गया है: http://stackoverflow.com/questions/4899440/creating-a-form-with-unknown-fields-and-storing-those-fields-into-a-serialized -फ –

+1

उपयोगी पोस्ट के लिए धन्यवाद! छोटे फिक्स, रेल 3 में यह होना चाहिए: <% = form.fields_for ...%> – cider

5

हैश को ओपनस्ट्रक्चर ऑब्जेक्ट में बदल देता है मेरी समस्या हल हो जाती है।

<% 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

असल में, यह जवाब है! आपने मेरा दिन बचाया: डी – MhdSyrwan

+0

इस मामले में ओपनस्ट्रक्चर का उपयोग करने के लिए अच्छी चाल। सफलता के साथ एक hstore समर्थित क्षेत्र के साथ इसका इस्तेमाल किया। –

संबंधित मुद्दे