我有以下型号:
class Deck < ActiveRecord::Base
has_many :cards
serialize :stats
attr_accessible :name, :description, :stats
end
在此,stats应该是一个字符串数组。我希望能够在行中添加任意数量的统计数据(使用javascript添加额外的“stat”输入框,但如果问题,则超出范围。)
我的问题是如何在视图中反映这种结构?如果我手动构建表单,那么它将如下所示:
<input type="text" name="deck[stats][]">
我的观点目前看起来像:
<%= f.fields_for :stats, @deck.stats do |p| %>
<%= p.label :p, "Stats: " %>
<%= p.text_field :p %>
<% end %>
但是这会输出:
<input type="text" name="deck[stats][p]">
我也想要一个计数器,所以我可以将标签显示为“Stat 1:”,“Stat 2:”等。
感谢任何帮助。
答案 0 :(得分:1)
发布解决方案,我去帮助未来的读者。
#Controller
def new
@deck = Deck.new
@deck.stats = ["", ""] #include for number of times you wish to show the field.
end
#View
<%@deck.stats.each_with_index do |s,i| %>
<p>
Stat <%=i+1%>: <%=text_field "stat", i, :name => "deck[stats][]", :value => s %>
</p>
<%end%>
答案 1 :(得分:0)
通过定义:p
,你认为你正在寻找一种名为p的统计数据方法,即stats.p
<%= f.fields_for :stats, @deck.stats do |p| %>
<%= p.label :p, "Stats: " %>
<%= p.text_field :p %>
<% end %>
而只是尝试<%= p.text_field %>
删除:p
答案 2 :(得分:0)
我不知道是否有干净的方法,但这应该有效:
<% @deck.stats.each do |value|
<%= f.fields_for :stats do |fields| %>
<%= fields.text_field "", :value => value %>
<% end %>
<% end %>
答案 3 :(得分:0)
= simple_form_for [:stats, @deck] do |f|
- 1.upto(4) do |i|
= f.input_field :stats, multiple: true, label: "Stat #{i}"
= f.submit