samedi 5 mai 2018

Multiple image Uploader using carrierwave for single model

I have created a gallery module and i have added two uploaders for single model. The code works fine but the when i upload the multiple images and try to edit that I get multiple options for uploading the same image. How do I fix that? Can we use two uploaders for same model or do we have some other approach do this?

model code:

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

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]['avatar'].each do |a|
      @gallery.images.create!(:avatar => a, :gallery_id =>  @gallery.id)
    end
    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   

Image Controller code:

class ImagesController < AdminController
  def image_params
   params.require(:image).permit(:gallery_id, :slideshow_id,:image, :avatar)
  end
 end
[![edit page ][1]][1]
form page:
 <%= form.fields_for :images 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 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 %>

Aucun commentaire:

Enregistrer un commentaire