2011-06-01 79 views
1

我有以下模式:导轨3序列化形式属性

class Deck < ActiveRecord::Base 
    has_many :cards 
    serialize :stats 
    attr_accessible :name, :description, :stats 
end 

在此,统计数据应该是一个字符串数组。我希望能够在行中添加任意数量的统计信息(使用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:”等。

任何帮助表示赞赏。

回答

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

+0

感谢您的建议,但我得到以下错误:**错误的参数数目(0 1)** – Gazler 2011-06-01 21:00:21

0

我不知道是否有干净的做法,但这应该工作:

<% @deck.stats.each do |value| 
    <%= f.fields_for :stats do |fields| %> 
    <%= fields.text_field "", :value => value %> 
    <% end %> 
<% end %> 
0
= simple_form_for [:stats, @deck] do |f| 
    - 1.upto(4) do |i| 
    = f.input_field :stats, multiple: true, label: "Stat #{i}" 
    = f.submit 
+0

你能如何,这将是比现有的答案最好加一些解释? – Joeytje50 2014-01-30 23:05:22