Ruby on rails carrierwave单型号多上传器

Ruby on rails carrierwave单型号多上传器,ruby-on-rails,carrierwave,Ruby On Rails,Carrierwave,在本教程的帮助下,我创建了一个gallery模块,现在我想再添加一个图像属性,将主图像添加到同一模型中。所以我想再创建一个上传器,但我有点困惑如何调用控制器,有人能帮我吗 我的代码如下所示: 型号代码: class Image < ApplicationRecord belongs_to :gallery mount_uploader :image, ImageUploader mount_uploader :avatar, AvatarUploader end class

在本教程的帮助下,我创建了一个gallery模块,现在我想再添加一个图像属性,将主图像添加到同一模型中。所以我想再创建一个上传器,但我有点困惑如何调用控制器,有人能帮我吗

我的代码如下所示:

型号代码:

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 < AdminController   
  def index
    @galleries = Gallery.all
  end

  def show
   @images = @gallery.images.all
  end

  def new
   @gallery = Gallery.new
   @image = @gallery.images.build
  end 

  def create
   @gallery = Gallery.new(gallery_params)
   respond_to do |format|
   if @gallery.save
     params[:images]['image'].each do |a|
      @images = @gallery.images.create!(:image => 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 GalleriesControllera,:gallery\u id=>@gallery.id)
结束
format.html{将_重定向到@gallery,注意:“gallery已成功创建”。}
format.json{render:show,status::created,location:@gallery}
其他的
format.html{render:new}
format.json{render json:@gallery.errors,status::unprocessable_entity}
结束
结束
结束
def库参数
参数require(:gallery).permit(:title,:details,:status,images\u attributes:[:id,:gallery\u id,:image,:avatar])
结束
图像控制器代码:

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

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

对,名称:“图像[化身][]”%>
true,name:“图像[图像][]”%>

我对修改库控制器创建部分感到困惑

如果有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
但我认为这有点冗长,如果您不想在表单中上载任何图像,它也不会真正阻止您(return
params[:images]['…']
nil)

顺便说一句,您的表单对于
表单是不正确的。它是:

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

对,名称:“图像[化身][]”%>
true,name:“图像[图像][]”%>

感谢您的帮助,它解决了这个问题。但是正如你所说的,这有点冗长,什么是更好的方法来做这件事呢?但是当上传多个图像时,当我尝试编辑时,图像上传选项会显示多次。我该怎么办?@SushmaKv将
字段更改为:
(我编辑我的答案)我想为上述内容添加一个上传文件夹的选项。我该怎么做?