数组不会持久保存到数据库

时间:2016-10-05 18:26:09

标签: ruby-on-rails arrays postgresql devise params

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

&#39;:车辆&#39;属性类型是&#39; text&#39;我使用这段代码使它成为一个数组:

serialize :vehicles, Array

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

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

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

vehicles: []

控制器代码:

 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

任何人都知道如何将这些值放入此数组中?

谢谢!

1 个答案:

答案 0 :(得分:0)

在强参数中,您必须允许:vehicles属性作为数组,如下所示:vehicles: []

我不确定您使用的是哪个版本的Devise,但是从“{3}}中提取”,在“强参数”部分中,您可以在应用程序控制器中允许vehicles这样: / p>

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