В этом посте я хотел бы рассказать как при помощи Paperclip не прибегая к другим гемам сделать множественную загрузку. Мы будем использовать конечно же Ruby on Rails.
Примечание: в тексте будет встречаться advert это модель, название которой вы должны заменить на свою модель.
Для начала,
Дальше прописываем столбики в миграции
Код модели прикрепляемого изображения
В модели в которой будут содержатся изображения в attr_accesible прописываем
Также добавим связь с моделью изображения и строку для того что-бы сделать мультимодельную форму
Теперь разберемся с формой, как собственно добавлять и удалять изображения.
В form_for прописываем :multipart => true
И саму кнопку загрузки, не забудьте вместо advert написать название своей модели, с которой связывали attached_asset
В контроллере пропишем сохранение данных в БД
И удаление изображения
И во вьюхе выведем свои изображения, которые загрузили
А в редактировании пропишем вывод изображений и их удаление
Когда мне понадобилось сделать загрузку нескольких фото, я мучался пол дня что-бы найти решение. Надеюсь вы затратите намного меньше времени для того что-бы это сделать.
Примечание: в тексте будет встречаться advert это модель, название которой вы должны заменить на свою модель.
Для начала,
rails g model AttachedAsset
Миграция
Дальше прописываем столбики в миграции
class CreateAttachedAssets < ActiveRecord::Migration
def change
create_table :attached_assets do |t|
t.attachment :asset
t.integer :attachable_id
t.integer :attachable_type
end
end
end
Модели
Код модели прикрепляемого изображения
class AttachedAsset < ActiveRecord::Base
belongs_to :attachable, :polymorphic => true
has_attached_file :asset, :styles => { :mini => "260x180#", :normal => "800x400#" }
attr_accessible :asset, :asset_file_name
end
В модели в которой будут содержатся изображения в attr_accesible прописываем
attr_accessible :attached_assets_attributes
Также добавим связь с моделью изображения и строку для того что-бы сделать мультимодельную форму
has_many :attached_assets, :as => :attachable
accepts_nested_attributes_for :attached_assets, :allow_destroy => true
Форма
Теперь разберемся с формой, как собственно добавлять и удалять изображения.
В form_for прописываем :multipart => true
<%= form_for @advert, :html => { :multipart => true } do |f| %>
И саму кнопку загрузки, не забудьте вместо advert написать название своей модели, с которой связывали attached_asset
<%= file_field_tag('advert_attached_assets_asset', multiple: true, name: "advert[attached_assets_attributes][][asset]") %>
Контроллер
В контроллере пропишем сохранение данных в БД
def create
advert = Advert.new(params[:advert])
advert.save
end
И удаление изображения
def delete_asset
ad = Advert.find(params[:advert_id])
asset = ad.attached_assets.find(params[:id])
asset.asset.clear
asset.destroy
ad.save
redirect_to :back
end
View
И во вьюхе выведем свои изображения, которые загрузили
<% @advert.attached_assets.each do |a| %>
<%= image_tag(a.asset.url(:normal)) %>
<% end %>
А в редактировании пропишем вывод изображений и их удаление
<% @advert.attached_assets.each do |a| %>
<%= image_tag(a.asset.url(:mini)) %>
<%= link_to "Удалить", advert_delete_asset_path(advert_id: a.attachable_id, id: a.id) %>
<% end %>
Роуты
resources :adverts do
get 'delete_asset' => "adverts#delete_asset"
end
Вывод
Когда мне понадобилось сделать загрузку нескольких фото, я мучался пол дня что-бы найти решение. Надеюсь вы затратите намного меньше времени для того что-бы это сделать.