Как сгенерировать массив из поля ввода с флажками в приложении Rails с помощью Simple Form Gem? - PullRequest
0 голосов
/ 05 июня 2018

Ситуация

У меня есть частичная форма с различными полями ввода, использующая Gem Simple Form в моем приложении Rails.Одним из вопросов является поле ввода флажка, и пользователь может выбрать несколько значений с вопросами, касающимися диеты и образа жизни (пьете ли вы кофе, едите белый хлеб? ... и т. Д.).В базе данных соответствующий столбец (с именем 'tick') является целочисленным полем ввода.

Что я хочу сделать

Я бы хотел, чтобы пользователь установил столько флажков, сколько необходимо и для техпараметры, которые будут отображаться в представлении «Показать» после того, как пользователь отправит форму.Таким образом, представление представления может отображать список отмеченных и непроверенных полей рядом со списком вопросов или отображать только те флажки, которые были отмечены.Либо подойдет.У меня есть ощущение, что решение может состоять в том, чтобы как-то создать массив ответов и отобразить результаты в представлении, но пока я не смог этого сделать.

Что на самом деле происходит

Как только пользователь отправляет форму, он перенаправляется в представление '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: 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 голосов
/ 05 июня 2018

Вы можете 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

Теперь ваша модель может хранить несколько «чисел» в tick, просто измените отображение в режиме просмотра (@formulario.tick теперь возвращает что-то вроде «['1', '2', '3']")

...