【问题标题】:Rails Checkboxes as arrayRails 复选框作为数组
【发布时间】: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


【解决方案1】:

如果您将数组保存在数据库中,请将其添加到您的模型中:

class Project < ActiveRecord::Base
  serialize :topic
end

更新

并将您的表单设置为:

 %p
   = p.label "Value1"
   = p.check_box(:topic, {:multiple => true}, "value1", nil, name:"project[topic][]")
   = p.label "Value2"
   = p.check_box(:topic, {:multiple => true}, "value2", nil, name:"project[topic][]")
   = p.label "Value3"
   = p.check_box(:topic, {:multiple => true}, "value3", nil, name:"project[topic][]")

如果你得到允许的参数问题,添加如下:

params.permit! #only if you get issue of permitted parameter

希望这会对你有所帮助。

【讨论】:

  • 遗憾的是没有解决它。 “语法错误,意外')',期待 =>”,因为控制器许可内的“=> []”和 :topic[] 也在视图中给出错误
  • 它适用于许可证!在控制器内部(不需要名称),但我想使用许可的白名单,所以我必须研究如何使用数组来做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多