두 개가 아닌 하나의 레코드에 대해 다른 구조를 가지고 있습니다.이 필드를 제목으로 처리하기 위해 고심했습니다.여러 레코드가있는 SimpleForm의 Params 해시는
하나 이상의 필드 세트가있는 일괄 편집 페이지를 작성하기 위해 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'
하나 개의 레코드에 대한 PARAMS 해시는 다음과 같습니다
: 두 개의 레코드 것은 다음과 같습니다 동안, 배열과"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
을 사용하고 있습니다.
어둠 속에서 약간의 발사가 있지만'= f.simple_fields_for '코스 []','do f | fsimple_fields_for : course do course | c |' 매번 동일한 유형의 매개 변수 해시가 발생할 수 있습니다. –
"하지만 더 간단한 방법이 있어야한다고 생각합니다." - 예, 개별 작성/업데이트 요청을 보내려면 ajax를 사용하십시오. – max
하지만'.require' 대신'.fetch'를 사용할 수는 있지만, 아직도 그다지 유지할 수없는 엉망진창이 될 것입니다. – max