Я создал модуль галереи с помощью этого урока https://kolosek.com/carrierwave-upload-multiple-images/, и теперь я хочу добавить еще один атрибут изображения с основным изображением к той же модели. Так что я решил создать еще один загрузчик, но я немного озадачен тем, как назвать, что контроллер может мне помочь?
Мой код выглядит так:
Код модели:
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 ImagesController < AdminController
def image_params
params.require(:image).permit(:gallery_id, :slideshow_id,:image, :avatar)
end
end
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 %>
Я запутался в изменении части создания контроллера галереи.