Rails 3序列化的表单属性



我有以下模型:

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

相关内容

  • 没有找到相关文章

最新更新