2015-12-26 3 views
0

Мой вопрос начинается с here. Я использую Sqlite3, и мое отношение модели выглядит так.carrierwave Загрузка нескольких изображений одним нажатием кнопки

class ImagePost < ActiveRecord::Base 
    has_many :attachments 
end 

Моя привязанность

class Attachment < ActiveRecord::Base 
    belongs_to :image_post 
    mount_uploader :img, S3uploaderUploader 
end 

Дело в том, что я хочу, чтобы мои пользователи загружать свои изображения с помощью одной кнопки. Прямо сейчас, я сделал

<%= form_tag img_upload_create_path, method: "POST", html: { multipart: true } do %> 
     <%= hidden_field_tag("image_post_id", @image_post.id) %> 
     <%= hidden_field_tag("user_id", current_user.id) %> 

     <%= file_field_tag 'user_pic', multiple: true, accept: 'image/png,image/gif,image/jpeg' %> 

     <%= submit_tag "image-upload", :class => "btn btn-primary btn-lg" %> 
     <% end %> 

Мой image_upload контроллер,

class ImgUploadController < ApplicationController 
    def create 
    @user_img = Attachment.create(
     hasuk_house_id: params[:image_post_id], 
     user_id: current_user.id, 
     img: params[:user_pic] 
     ) 
    end 
end 

Но когда я передавать файлы, @user_img.img = nil Что я буду делать?

+0

Вы читали [это] (https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads) –

+0

Да, я это сделал. Но я также прочитал [это] (http://stackoverflow.com/questions/30951168/workaround-for-carrierwave-multiple-file-upload-using-sqlite3-in-development). Это не создает никаких проблем? –

+0

Правильно, вы не сможете использовать тип столбца 'json' или' array' с sqlite. –

ответ

1

После более внимательно, у вас есть несколько проблем здесь происходит, первое:

<%= form_tag img_upload_create_path, method: "POST", html: { multipart: true } 

должно быть:

<%= form_tag(img_upload_create_path, { multipart: true, method: "POST"}) 

(form_tag аргументы структурированы немного отличается от form_for)

, а затем вам нужно указать рельсы, чтобы поместить ваши файлы в params в виде массива, вы делаете это, используя имя-монастырь ион для элементов формы. поэтому вместо того, чтобы:

<%= file_field_tag 'user_pic', multiple: true, accept: 'image/png,image/gif,image/jpeg' %> 

вам нужно:

<%= file_field_tag 'user_pic[]', multiple: true, accept: 'image/png,image/gif,image/jpeg' %> 

и, наконец, в контроллере, вы будете иметь файлы в params[:user_pic], который является массивом, так что вам придется перебрать его и создайте свои приложения для каждого из них:

params[:user_pic].each do |pic| 
    Attachment.create(
     hasuk_house_id: params[:image_post_id], 
     user_id: current_user.id, 
     img: pic 
) 
end 

Надеюсь, что это поможет.

+0

Да! ваше решение отлично работает. Я пытался сделать свой «img'to json и искать решения. Во всяком случае, ваше решение действительно хорошее! Благодарю. –

+0

Без проблем, рад, что я мог бы помочь. –

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