Nic*_*oul 11 activerecord erb ruby-on-rails-3
我有一个rails3表单,允许用户编辑答案列表,作为评估的一部分.
我使用fields_for
循环生成每个文本输入:
app/models/assessment.rb:
class Assessment < ActiveRecord::Base
serialize :answers, Hash # answers is a t.text field used to store all answers.
end
Run Code Online (Sandbox Code Playgroud)
app/view/assessment/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 %>
Run Code Online (Sandbox Code Playgroud)
问题:在fields_for
循环做零迭代,没有现场被打印出来.
(尽管"初始化答案:"正确显示:{"a"=> 143,"b"=> 42})
efo*_*foo 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 %>
Run Code Online (Sandbox Code Playgroud)
小智 7
将Hash转为OpenStruct对象解决了我的问题.
<% 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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3771 次 |
最近记录: |