我试图在我的数据库中存储一个数组(: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
任何人都知道如何将这些值放入此数组中?
谢谢!
答案 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