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

标签 ruby-on-rails arrays postgresql devise parameters

我正在尝试在我的数据库中存储一个数组 (: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/

相关文章:

ruby-on-rails - BigDecimal 验证会引发非数值错误

sql - postgresql - 如何在函数中将参数作为表发送?

sql - Postgresql:错误:无法识别的连接类型:7

hibernate - Postgres- 目标列表最多可以有 1664 个条目

mysqlplus 是比 ruby​​ mysql 更好的适配器?

ruby-on-rails - 如何通过数组通过关系通过 has_one 查找所有记录

mysql - Rails 将列更改为 mediumtext

javascript - 如何在 Javascript 中获取动态对象属性?

python - 如何用另一个数组创建或填充一个 numpy 数组?

c# - arr[0]++ 和++arr[0] 的区别