Nested model - multiple uploads

suggest change

If you want to create multiple uploads, first thing you might want to do is create new model and set up relations

Let’s say you want an multiple images for the Product model. Create an new model and make it belongs_to your parent model

rails g model ProductPhoto

#product.rb
has_many :product_photos, dependent: :destroy
accepts_nested_attributes_for :product_photos

#product_photo.rb
belongs_to :product
mount_uploader :image_url, ProductPhotoUploader # make sure to include uploader (Carrierwave example)

accepts_nested_attributes_for is must, because it allow us to create nested form, so we can upload new file, change product name and set price from an single form

Next, create form in a view (edit/create)

<%= form_for @product, html: { multipart: true } do |product|%>

    <%= product.text_field :price # just normal type of field %>

    <%= product.fields_for :product_photos do |photo| # nested fields %>
        <%= photo.file_field :image, :multiple => true, name: "product_photos[image_url][]" %>
    <% end %>
    <%= p.submit "Update", class: "btn" %>
<% end %>

Controller is nothing special, if you don’t want to create an new one, just make an new one inside your product controller

# create an action
def upload_file
  printer = Product.find_by_id(params[:id])
  @product_photo = printer.prodcut_photos.create(photo_params)
end

# strong params
private
  def photo_params
    params.require(:product_photos).permit(:image)
  end

Display all images in a view

<% @product.product_photos.each do |i| %>
    <%= image_tag i.image.url, class: 'img-rounded' %>
<% end %>

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:


File Uploads:
*Nested model - multiple uploads

Table Of Contents
18File Uploads
55CSV