我努力把它消化成一个标题。
我正在使用 SimpleForm 构建具有一个或多个字段集的批量编辑页面 - 一个用于已构建但尚未保存的 ActiveRecord 模型集合中的每条记录。
我的表格如下所示:
= simple_form_for :courses, method: :patch do |f|
- @courses.each do |course|
= field_set_tag do
= f.simple_fields_for 'courses[]', course do |c|
= c.input :title
.row
.medium-6.columns
= c.input :start_date, as: :string, input_html: { class: 'input-datepicker' }
.medium-6.columns
= c.input :end_date, as: :string, input_html: { class: 'input-datepicker' }
= f.submit 'Save', class: 'primary button'
一条记录的参数哈希如下所示:
"courses"=>{"courses"=>[{"title"=>"Course Y", "start_date"=>"2017-09-26", "end_date"=>"2017-07-31"}]}
使用数组,而对于两条记录,它看起来像这样:
"courses"=>{"courses"=>{"1"=>{"title"=>"Course X", "start_date"=>"2018-01-16", "end_date"=>"2018-07-30"}, "2"=>{"title"=>"Course Y", "start_date"=>"2017-09-26", "end_date"=>"2018-07-30"}}}
带有字符串整数键控哈希。
当我尝试使用强参数时,这会成为一个问题。经过多次黑客攻击,我最终得到了这段代码,它适用于多条记录,但仅在提交一条记录时失败:
ActionController::Parameters
.new(courses: params[:courses][:courses].values)
.permit(courses: [:title, :start_date, :end_date])
.require(:courses)
param is missing or the value is empty: courses
突出显示上面的行失败.require(:courses)
。
通过协调单记录情况与多记录情况可以“解决”该问题:
if params[:courses][:courses].is_a?(Array)
params[:courses][:courses] = { '1': params[:courses][:courses][0] }
end
但感觉应该有一种更简单的方法。
有没有更好的方法来为这个用例编写表单?我是否错过了具有强参数的技巧?
我正在使用rails 5.0.5
和simple_form 3.5.0
。