我有一个序列化数组的字段。它被加载到我的模型中并以下列形式访问:
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.
因此,步骤将作为数组中的最后一个条目提交。 如何正确显示表单并将更新后的数组显示回控制器进行处理?
答案 0 :(得分:0)
您的text_field
需要将multiple
设置为true
。我相信在您的情况下,类似的事情应该可以解决。
<%= f.text_field(:steps, { multiple: true, value: @site.steps[step] }) %>