gpt4 book ai didi

ruby-on-rails - 数组不会持久化到数据库

转载 作者:行者123 更新时间:2023-11-29 13:51:42 25 4
gpt4 key购买 nike

我正在尝试在我的数据库中存储一个数组 (:vehicles)。该数组包含用户使用复选框选择的 3 种可能的车辆。

<% @vehicles.each_with_index do |vehicle,index| %>
<label>
<div >
<%= check_box_tag "vehicles[]", index ,class: "available" ,style: "display:none" %>
<%= vehicle %>
</div>
</label>
<%end %>

':vehicles' 属性类型是 'text',我使用这段代码使其成为一个数组:

serialize :vehicles, Array

如果我发送参数,它会在一个数组中获取这些值。

"vehicles"=>["0", "1", "2"],
"commit"=>"Sign up!",
"controller"=>"registrations",
"action"=>"create"

问题是当我尝试保存这个数组时,它没有存储在数据库中。在数据库中,代码如下所示:

vehicles: []

Controller 代码:

 def create
@student = Student.create(student_params)
if @student.save!
redirect_to @student
else
render :new
end
end

学生参数:

def student_params
params.require(:student).permit(availabilities_attributes: [ :id, :day, :available])
end

有人知道如何将这些值放入这个数组吗?

谢谢!

最佳答案

在您的强参数中,您将不得不允许 :vehicles 属性作为数组,如下所示:vehicles: []

我不确定您使用的是哪个版本的 Devise,但来自他们的 documentation ,在“强参数”部分,您可以在应用程序 Controller 中允许这样的vehicles:

def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) do |student_params|
student_params.permit({ vehicles: [] }, :email, :password, :password_confirmation)
end
end

此外,如果您使用的是 Postgres 数据库,我建议您设置 vehicles 属性以直接在数据库中接收数组。您可以像这样进行迁移:

class AddArrayToStudents < ActiveRecord::Migration
def change
add_column :students, :vehicles, :string, array: true, default: []
end
end

关于ruby-on-rails - 数组不会持久化到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39881222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com