如何使用Simple Form Gem从Rails应用程序中的复选框表单输入字段生成数组?

时间:2018-06-05 07:20:19

标签: ruby-on-rails simple-form

情况

我在Rails应用程序中使用Simple Form Gem创建了一个包含各种输入字段的表单。其中一个问题是复选框输入字段,用户可以选择多个值,其中包含与饮食和生活方式相关的问题(你喝咖啡,吃白面包吗?等等)。在数据库上,相应的列(名为' tick')是一个整数输入字段。

我想做什么

我希望用户根据需要选择多个复选框,并在“显示”中显示这些选项。用户提交表单后查看。因此,show视图可能会在问题列表旁边显示已选中和未选中框的列表,或者仅显示已选中的复选框。两者都适合。我有一种感觉,解决方案可能是以某种方式创建一系列答案并在视图中显示结果,但到目前为止我还没有能够做到这一点。

究竟发生了什么

用户提交表单后,会将其重定向到' show'查看相应的html输出只是" Tick"没有给出实际答案。请参阅下面的html输出:

.
.
.
<p>
<strong>Tick:</strong>
</p>
.
.
.

表格部分:_form.html.erb

<%= simple_form_for(@formulario) do |f| %>
  <%= f.error_notification %>
  <%= f.error_notification message: f.object.errors[:base].to_sentence if 
  f.object.errors[:base].present? %>
.
.
.
.
<%= f.input :tick,
    label:'Pon un tic en las Casillas si son aplicables en tu caso',
    collection: [
    ['padecido desorden alimentaria?', '1'],
    ['comes mucho lacteo o trigo?', '2'],
    ['te gusta comer/preparer comida?', '3'],
    ['compras comida ecológica?', '4'],
    ['añades sal a la comida?', '5'],
    ['tomas café o té descafeinado?', '6'],
    ['usas margarinas?', '7'],
    ['cocinas con aceites vegetales?', '8'],
    ['bebes agua filtrada?', '9'],
    ['has cambiado tu dieta ultimamente?', '10'],
    ['tomas té o café?', '11'],
    ['comes pan blanco?', '12'],
    ['comes mucho comida frita?', '13'],
    ['compras mucha comida para llevar?', '14'],
    ['comes mucha fruta y verdua fresca?  ', '15'],
    ['añades muchas salsas a la comida?', '16'],
    ['comes fuera a menudo?', '17'],
    ['cocinas para mas personas?', '18'],
    ['tienes apetito grande?', '19'],
    ['tu dieta es repetitiva?', '20'],
    ['comes pasta y arroz?', '21'],
    ['comes comida preparada?', '22'],
    ['usas el microondas?', '23'],
    ['eliges comida bajo en grasa?', '24'],
    ],
    as: :check_boxes %>
.
.
.
<% end %>

显示视图:show.html.erb

<p id="notice"><%= notice %></p>
.
.
.
<p>
  <strong>Tick:</strong>
  <%= @formulario.tick %>
</p>
.
.
.
<%= link_to 'Edit', edit_formulario_path(@formulario) %> |
<%= link_to 'Back', formularios_path %>

创建数组是前进的方向还是有更快的解决方案?

1 个答案:

答案 0 :(得分:1)

您可以serialize您的tick属性在您的数据库中存储数组。

如果tick属性是整数,请运行迁移将其更改为字符串:

def change
  change_column :formularios, :tick, :string
end

序列化模型中的属性:

class Formulario < ApplicationRecord
  serialize :tick, Array
end

允许tick强参数作为数组:

def formulario_params
  params.require(:formulario).permit(tick: [])
end

现在您的模型可以存储多个&#34;数字&#34;在tick中,只需更改显示视图中的显示(@formulario.tick现在返回类似&#34; [&#39; 1&#39;,&#39; 2&#39;,&#39 ; 3&#39;]&#34)