2016-04-08 3 views
0

Я новичок в Ruby on Rails. Я создаю приложение, которое может хранить фотографии в галерее. Я попытался загрузить фотографию с помощью paperclip и работает успешно. Но теперь я хочу добавить несколько фотографий в одну галерею одновременно с помощью paperclip. Я не понимаю, как это сделать. Может кто-нибудь мне помочь?Множественная загрузка изображений в рельсах

В gemfile я написал "gem" paperclip '".

это мои модели:

#Gallery Model 
class Gallery < ActiveRecord::Base 
has_many :gallery_photos 
validates :name, presence: true 
end 

#GalleryPhoto Model 
class GalleryPhoto < ActiveRecord::Base 
belongs_to :gallery 
has_attached_file :photo, :styles => { :small => "150x150>" }, 
       :url => "/assets/gallery_photos/:id/:style/:basename.:extension", 
       :path => ":rails_root/public/assets/gallery_photos/:id/:style/:basename.:extension" 

validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/jpg', 'image/png'] 
end 

Это мой контроллер для gallery_photo:

def create 

@gallery_photo = GalleryPhoto.new(gallery_photo_params) 
respond_to do |format| 
    if @gallery_photo.save 
    format.html { redirect_to galleries_galleryhome_path(id: @gallery_photo.gallery_id), notice: 'Gallery photo was successfully created.' } 
    format.json { render :show, status: :created, location: @gallery_photo } 
    else 
    format.html { render :new } 
    format.json { render json: @gallery_photo.errors, status: :unprocessable_entity } 
    end 
end 
end 

private 
def gallery_photo_params 
    params.require(:gallery_photo).permit(:gallery_id,:photo) 
end 

Это мой миграции файла:

class AddAttachmentPhotoToGalleryPhotos < ActiveRecord::Migration 
def self.up 
    change_table :gallery_photos do |t| 
    t.attachment :photo 
    end 
end 

def self.down 
    remove_attachment :gallery_photos, :photo 
end 
end 

На мой взгляд, я написал следующая линия для прикрепления изображений:

<%= form_for @gallery_photo,html: { multipart: true},url: gallery_photos_path,method: :post do |f| %> 
    <div> 
    <%= f.file_field :photo, multiple: true %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Это является полем таблицы галереяфото:

class CreateGalleryPhotos < ActiveRecord::Migration 
    def change 
    create_table :gallery_photos do |t| 
     t.references :gallery, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    end 
end 

И Attachment Полей добавляют миграционный файл, который я уже упоминал выше.

+0

Что такое ошибка? – Sukanta

+0

Он не хранит атрибуты изображений. – Vishal

+0

можете ли вы поместить поля таблицы? – Sukanta

ответ

0

Я думаю, что вы забыли добавить вложение, связанные атрибуты gallery_photos таблицы

как

add_column :photos, :photo_file_name,:string 
add_column :photos, :photo_content_type,:string 
add_column :photos, :photo_file_size,:integer 
add_column :photos, :photo_created_at,:datetime 
+0

Поскольку я использовал paperclip, эти поля автоматически добавляются в таблицу. – Vishal

0

Эта строка кода не удалось

@gallery_photo = GalleryPhoto.new(gallery_photo_params) 

потому что gallery_photo_params-х Возврат значения в форме сообщения - это что-то вроде

{ 
    gallery_photo: { photo: [file1, file2,...] } 
} 

Если вы хотите обновить несколько фотографий в галерее. вам нужно обновить галерею, а не галерею.

<%= form_for @gallery do |f| %> 
    <div> 
    <%= f.file_field :gallery_photos, multiple: true %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

и в вашей галерее контроллера

def update 
    if @gallery.update(gallery_params) 

    redirect_to some_path 
    else 
    render :edit 
    end 
end 

Это то же самое, если вы хотите создать галерею с несколькими фотографиями.

+0

Благодарим вас за решение u, но поскольку я создал обе модели с эшафотом. И я хочу загрузить фотографии после того, как пользователь перейдет на главную страницу галереи. Существует домашняя страница галереи. Пользователь может перейти на эту страницу через список на индексной странице галереи. На этой домашней странице пользователь может добавлять фотографии с новой страницы gallery_photo, которая перемещается по ссылке на главной странице галереи. – Vishal

Смежные вопросы