Rails 5 ActiveRecord以表格形式更新序列化数组

时间:2017-02-05 19:42:58

标签: ruby-on-rails arrays forms activerecord

我有一个序列化数组的字段。它被加载到我的模型中并以下列形式访问:

class Site < ApplicationRecord
  serialize :steps, Array
end


<table class="listing" summary="Site list">
    <tr class="header">
      <th>Name</th>
      <th>Step 1</th>
      <th>Step 2</th>
      <th>Step 3</th>
      <th>Actions</th>
    </tr>
    <% @sites.each do |site| %>
    <tr>
      <td><%= site.name %></td>
      <% site.steps.each do |step| %>
      <td><%= step %></td>
      <% end %>
      <td class="actions">
        <%= link_to("Show", site_path(site), :class => 'action show') %>
        <%= link_to("Edit", edit_site_path(site), :class => 'action edit') %>
        <%= link_to("Delete", delete_site_path(site), :class => 'action delete') %>
      </td>
    </tr>
    <% end %>
  </table>

我正在尝试更新我的编辑表单,以便我可以编辑数组中的每个“步骤”。

 <%= form_for(@site) do |f| %>

    <table summary="Site form fields">
      <tr>
        <th>Name</th>
        <td><%= f.text_field(:name) %></td>
      </tr>
      <% a=1 %>
      <% @site.steps.each do |step| %>
      <tr>
      <th>Step <%= a %>
      <td><%= text_field :site, :steps, :value => step %></td>
      <% a += 1 %>
      </tr>
      <% end %>
    </table>

    <div class="form-buttons">
      <%= f.submit("Update Site") %>
    </div>

  <% end %>

编辑表单将数据字段正确显示为数组中的每个字符串。但是,当我尝试提交表单时,我收到以下错误:

Attribute was supposed to be a Array, but was a String.

因此,步骤将作为数组中的最后一个条目提交。 如何正确显示表单并将更新后的数组显示回控制器进行处理?

1 个答案:

答案 0 :(得分:0)

您的text_field需要将multiple设置为true。我相信在您的情况下,类似的事情应该可以解决。

<%= f.text_field(:steps, { multiple: true, value: @site.steps[step] }) %>