我在Rails应用程序中使用Simple Form Gem创建了一个包含各种输入字段的表单。其中一个问题是复选框输入字段,用户可以选择多个值,其中包含与饮食和生活方式相关的问题(你喝咖啡,吃白面包吗?等等)。在数据库中,相应的列(名为“tick”)是一个字符串输入字段。
我希望用户根据需要选择多个复选框,并在用户提交表单后在“显示”视图中显示这些选项。原始输出应该是一个数组,其数字对应于表单中选定的复选框。
我使用了序列化方法https://apidock.com/rails/ActiveRecord/Base/serialize/class 尝试将输入保存为一个数组,该数组将在show视图中从数据库中检索。请参阅下面的模型和控制器中的实现。
一旦用户提交表单,他们就会被重定向到“show”视图,其中相应的HTML输出只是“[]”而没有给出实际答案。请参阅下面的HTML输出:
<p>
<strong>Pon un tic en las Casillas si son aplicables en tu caso:</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 %>
Formularios模型,formulario.rb
class Formulario < ApplicationRecord
serialize :tick, Array
end
我也尝试从
更改Formulario控制器中的params散列..., :tick, ....
到
..., tick: [], ...
以及
..., (tick: []), ...
给出了语法错误“语法错误,意外',',期待=&gt;”
Formularios controller.rb
class FormulariosController < ApplicationController
before_action :set_formulario, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, only: [:show, :new]
# before_action :user_signed_in?, only: [:show, :new]
before_action :authenticate_admin, only: [:show, :index]
# GET /formularios
# GET /formularios.json
def index
@formularios = Formulario.all
end
# GET /formularios/1
# GET /formularios/1.json
def show
end
# GET /formularios/new
def new
@formulario = Formulario.new
end
# GET /formularios/1/edit
def edit
end
# POST /formularios
# POST /formularios.json
def create
@formulario = Formulario.new(formulario_params)
respond_to do |format|
if @formulario.save
format.html { redirect_to @formulario, notice: 'Formulario was successfully created.' }
format.json { render :show, status: :created, location: @formulario }
else
format.html { render :new }
format.json { render json: @formulario.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /formularios/1
# PATCH/PUT /formularios/1.json
def update
respond_to do |format|
if @formulario.update(formulario_params)
format.html { redirect_to @formulario, notice: 'Formulario was successfully updated.' }
format.json { render :show, status: :ok, location: @formulario }
else
format.html { render :edit }
format.json { render json: @formulario.errors, status: :unprocessable_entity }
end
end
end
# DELETE /formularios/1
# DELETE /formularios/1.json
def destroy
@formulario.destroy
respond_to do |format|
format.html { redirect_to formularios_url, notice: 'Formulario was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def authenticate_admin
unless current_user.admin?
redirect_to root_path
end
end
# def authenticate
# authenticate_user! && current_user.admin?
# end
# Use callbacks to share common setup or constraints between actions.
def set_formulario
@formulario = Formulario.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def formulario_params
params.require(:formulario).permit(:nombre, :fecha, :FdN, :direccion, :sexo, :email, :telefono, :movil, :profesion, :altura, :peso, :motivos, :especialistas, :dieta, :intolerancia, :detalles_1, :limites, :otro_1, :problema1, :p1, :p2, :p3, :problema2, :p4, :p5, :p6, :problema3, :p7, :p8, :p9, :problema4, :p10, :p11, :p12, :otro_2, :medicacion1, :m1, :m2, :m3, :m4, :m5, :m6, :medicacion2, :m7, :m8, :m9, :m10, :m11, :m12, :medicacion3, :m13, :m14, :m15, :m16, :m17, :m18, :otro_3, :suplemento1, :s1, :s2, :s3, :s4, :suplemento2, :s5, :s6, :s7, :s8, :suplemento3, :s9, :s10, :s11, :s12, :otro_4, :madre, :padre, :abuela_mat, :abuela_pat, :abuelo_mat, :abuelo_pat, :hermanos, :hermanas, :tios, :tias, :ninos, :sobrinos, :activa, :ejercicio1, :e1, :e2, :ejercicio2, :e3, :e4, :ejercicio3, :e5, :e6, :otro_5, :fumas1, :fumas2, :fumado, :alcol1, :alcol2, :alergia1, :alergia2, :habitos1, :habitos2, :habitos3, :habitos4, :galletas_tartas_bolleria, :leche, :huevos, :chocolates_dulces, :carne_roja, :carne_blanca, :pescado_blanco, :pezcado_azul, :carne_procesada, :pan, :te, :cafe, :refresco_lata, :agua, :verdura, :ensalada, :tick, :pecho, :dieta_sana, :motivacion, :desayuno1, :desayuno2, :desayuno3, :almuerzo, :almuerzo2, :almuerzo3, :cena1, :cena2, :cena3, :snacks1, :snacks2, :snacks3, :bebidas1, :bebidas2, :bebidas3)
end
end
如何获取序列化方法来保存数组?或者是否有一种替代方法可以用来实现同样的目的?即记录在表格中选择了哪个复选框并在显示视图中显示它们。