我有以下模型:
class Deck < ActiveRecord::Base
has_many :cards
serialize :stats
attr_accessible :name, :description, :stats
end
在这种情况下,stats应该是一个字符串数组。我希望能够向行中添加任意数量的统计数据(使用javascript添加额外的"统计"输入框,但这超出了问题的范围。)
我的问题是如何在视图中反映这种结构?如果我手动构建表单,那么它看起来像:
<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:"等。
感谢您的帮助。
发布我想要帮助未来读者的解决方案。
#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%>
通过定义: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
我不知道是否有一种干净的方法,但这应该有效:
<% @deck.stats.each do |value|
<%= f.fields_for :stats do |fields| %>
<%= fields.text_field "", :value => value %>
<% end %>
<% end %>
= simple_form_for [:stats, @deck] do |f|
- 1.upto(4) do |i|
= f.input_field :stats, multiple: true, label: "Stat #{i}"
= f.submit