单波模型的载波多重上传器

我已经在本教程https://kolosek.com/carrierwave-upload-multiple-images/的帮助下创建了一个库模块,现在我想再添加一个图像属性,将主图像添加到同一个模型中。 所以我提出再创建一个上传器,但我对如何调用控制器可以帮助我的人有点困惑?

我的代码如下所示:

MOdel代码:

class Image < ApplicationRecord belongs_to :gallery mount_uploader :image, ImageUploader mount_uploader :avatar, AvatarUploader end class Gallery < ApplicationRecord has_many :images accepts_nested_attributes_for :images end 

gallery_controller.rb

  class GalleriesController  a, :gallery_id => @gallery.id) end format.html { redirect_to @gallery, notice: 'Gallery was successfully created.' } format.json { render :show, status: :created, location: @gallery } else format.html { render :new } format.json { render json: @gallery.errors, status: :unprocessable_entity } end end end def gallery_params params.require(:gallery).permit(:title, :details, :status, images_attributes:[:id, :gallery_id, :image, :avatar]) end 

图像控制器代码:

 class ImagesController < AdminController def image_params params.require(:image).permit(:gallery_id, :slideshow_id,:image, :avatar) end end 

form.html.erb

  
true, name: "images[avatar][]" %>
true, name: "images[image][]" %>

我很困惑修改画廊控制器创建部分。

如果您有2个上传者,可以在create方法中添加2次图像创建

 params[:images]['image'].each do |a| @gallery.images.create!(:image => a, :gallery_id => @gallery.id) end params[:images]['avatar'].each do |a| @gallery.images.create!(:avatar => a, :gallery_id => @gallery.id) end 

但我觉得它有点冗长,如果你不想在你的表格中上传任何图像,它并没有真正阻止(返回params[:images]['...'] nil)

顺便说一下你的表格不正确的form.fields_for 。 它的 :

 <%= form.fields_for :images_attributes do |p| %> 
<%= p.label :master_image, class: "col-2 col-form-label" %> <%= p.file_field :avatar, :multiple => true, name: "images[avatar][]" %>
<% end %> <%= form.fields_for :images_attributes do |p| %>
<%= p.label :image, class: "col-2 col-form-label" %> <%= p.file_field :image, :multiple => true, name: "images[image][]" %>
<% end %>