【发布时间】:2015-09-04 11:41:09
【问题描述】:
我正在尝试将多个复选框作为数组传递给数据库表。 所以我想在一个项目中添加多个主题。
= form_for @project, url: admin_projects_path, :html => { :multipart => true } do |p|
%p
=p.label :name
=p.text_field :name
%p
= p.label :topic
%p
= p.label "Value1"
= p.check_box(:topic, {:multiple => true}, "value1", nil)
= p.label "Value2"
= p.check_box(:topic, {:multiple => true}, "value2", nil)
= p.label "Value3"
= p.check_box(:topic, {:multiple => true}, "value3", nil)
%p
= p.submit
但这里的主题在项目中返回 nil,即使我选中了多个复选框 (我在控制器中添加了白名单参数,所以这不是原因)
我在这里做错了什么?
编辑:
这是控制器的代码:
def new
@project = Project.new
end
def create
@project = Project.new(project_params)
if @project.save
redirect_to admin_projects_path
else
render :new
end
end
private
# param white listing
def project_params
params.require(:project).permit(:name, :description, :photo, :project_type, :highlight, :content, :topic, :category)
end
找到的解决方案:
视图正确。
serialize :topic
需要添加到项目模型中
应编辑许可参数,使其仅接受主题上的数组
private
# param white listing
def project_params
params[:project][:topic] ||= []
params.require(:project).permit(:name, :description, :content, topic: [])
end
【问题讨论】:
-
可能不相关,但除非您计划在其中设置文件上传字段,否则您不需要将表单设为多部分。我希望通过
params[:project][:topic] = ["value1", "value2", "value3"]发送。当您检查所有复选框并提交表单时,您能否对您的问题进行编辑并添加实际通过的参数?此外,将使用这些参数的控制器代码添加到您的问题中。您的视图代码可能不是问题。 -
我也有一个文件上传。但删除了它以保持它对stackoverflow的清洁。即使我选中所有复选框,它也会返回 nil。
-
请添加表单提交的参数。
-
??所有其他参数都没有问题并且正确地提交,只有带有数组的复选框才会返回 nil
-
好吧,如果您将参数添加到您的问题中,以便我们可以看到它们,那么有人可能能够诊断问题。对不起,我已经问过你两次了,你似乎没有理解。
标签: ruby-on-rails arrays forms checkbox