嵌套Rails 4模型中的多文件上载不适用于强参数

时间:2015-12-16 15:40:31

标签: ruby-on-rails-4 nested-attributes strong-parameters

好吧,我花了24小时的时间试图弄明白这一点,没有运气。

我使用simple_form和一个带有accepts_nested_attributes_for的嵌套模型进行了非常简单的设置:

= f.simple_fields_for :images, Image.new do |fi|
 %label.file
   = fi.input_field :image, as: :file, multiple: true
   %span.file-custom

那里没什么棘手的。表单显示,我可以选择多个文件。但是,当我尝试提交时,BAM。这是Rails 4.2。它的参数很强。以下是我为def material_params

尝试的内容
params.require(:material).permit(:name, :url, :description, :subject_id, :universal_id, :universal_id_type, :short_description, :expires_on, :submitter_id, site_ids: [], instructor_ids: [], instructors_attributes: [:name]).permit(images_attributes: [:image, :_destroy, :id])


params.require(:material).permit(:name, :url, :description, :subject_id, :universal_id, :universal_id_type, :short_description, :expires_on, :submitter_id, site_ids: [], instructor_ids: [], instructors_attributes: [:name]).permit({images_attributes: [:image, :_destroy, :id]})

params.require(:material).permit(:name, :url, :description, :subject_id, :universal_id, :universal_id_type, :short_description, :expires_on, :submitter_id, site_ids: [], instructor_ids: [], instructors_attributes: [:name]).permit({images_attributes: [:image, :_destroy, :id]}).tap do |whitelisted|
  whitelisted[:images_attributes] = params[:material][:images_attributes]
end

params.require(:material).permit(:name, :url, :description, :subject_id, :universal_id, :universal_id_type, :short_description, :expires_on, :submitter_id, site_ids: [], instructor_ids: [], instructors_attributes: [:name]).permit(:images_attributes).tap do |whitelisted|
  whitelisted[:images_attributes] = params[:material][:images_attributes]
end 

params.require(:material).permit(:name, :url, :description, :subject_id, :universal_id, :universal_id_type, :short_description, :expires_on, :submitter_id, site_ids: [], instructor_ids: [], instructors_attributes: [:name]).permit(images_attributes: [:image, :_destroy, :id]).tap do |whitelisted|
  whitelisted[:images_attributes] = params[:material][:images_attributes]
end 

以下是POST的示例:

{"utf8"=>"✓",
     "_method"=>"patch",
     "authenticity_token"=>"mWI5pvoejIQhLKHBmr0/XHKYonhR67GKAvm4j4PYkLRqC6VnmmycEafqnwOXqJdf/n9Mk65EfCnSzbMiHPqv0A==",
     "material"=>{"submitter_id"=>"1",
     "name"=>"Official Guide to the ACT",
     "url"=>"http://amazon.com/act",
     "short_description"=>"",
     "expires_on"=>"2015-12-16",
     "description"=>"",
     "universal_id"=>"",
     "universal_id_type"=>"ISBN",
     "instructor_ids"=>["",
     "1",
     "3"],
     "images_attributes"=>{"0"=>{"_destroy"=>"0",
     "id"=>"5"},
     "1"=>{"image"=>[#<ActionDispatch::Http::UploadedFile:0x007ff01e6481e0 @tempfile=#<Tempfile:/var/folders/dw/pz_hxz2x43gdqnphs6h6skr40000gn/T/RackMultipart20151216-86036-18d4wsp.jpg>,
     @original_filename="il_570xN.760452533_rc6v.jpg",
     @content_type="image/jpeg",
     @headers="Content-Disposition: form-data; name=\"material[images_attributes][1][image][]\"; filename=\"il_570xN.760452533_rc6v.jpg\"\r\nContent-Type: image/jpeg\r\n">,
     #<ActionDispatch::Http::UploadedFile:0x007ff01e6481b8 @tempfile=#<Tempfile:/var/folders/dw/pz_hxz2x43gdqnphs6h6skr40000gn/T/RackMultipart20151216-86036-80v4nh.jpg>,
     @original_filename="imgres.jpg",
     @content_type="image/jpeg",
     @headers="Content-Disposition: form-data; name=\"material[images_attributes][1][image][]\"; filename=\"imgres.jpg\"\r\nContent-Type: image/jpeg\r\n">]}},
     "instructors_attributes"=>{"2"=>{"name"=>""}},
     "site_ids"=>["",
     "1"]},
     "commit"=>"Update Material",
     "id"=>"official-guide-to-the-act"}

我总是得到:

found unpermitted parameter: images_attributes

0 个答案:

没有答案