@andreychumak
junior

(Sinatra) Как загружать несколько изображений в CarrierWave?

Пробовал создавать еще одну модель (Attachment), но не сработало.
Думаю, в контроллере нужно что-то типа этого
post '/posts' do
  @post = Post.new(
    :image        => params[:image],
  )
  @post.image = params[:image]
  #binding.pry
  if @post.save!
    redirect :"/"
  else
    redirect :"/new"
  end
end

или в форме перебрать в name=""

Моя view
<form action="/posts" method="post" role="form" enctype="multipart/form-data">
    <input type='file' name='image' class='form-control'>
    <input type='file' name='image' class='form-control'>
    <input type='file' name='image' class='form-control'>
    <button type="submit" class="btn btn-success">Submit</button>
</form>


Моя миграция
class CreatePosts < ActiveRecord::Migration[5.0]
  def change
    create_table :posts do |t|
      t.string :image

      t.timestamps null: false 
    end
  end
end


Моя модель
class Post < ActiveRecord::Base
  mount_uploader :image, ImagesUploader
end


Мой action
post '/posts' do
  @post = Post.new(params[:post])
  @post.image = params[:image]
  #binding.pry
  if @post.save!
    redirect :"/"
  else
    redirect :"/new"
  end
end
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
Без дополнительной таблицы обойтись может быть и можно, но решение будет слишком сложным. Поэтому нужно сделать таблицу post_attachments, в миграции связать с постами и естественно нужно поле image, должно получиться что-то вроде:

Сlass CreatePostAttachment < ActiveRecord::Migration
  def change
    create_table :post_attachments do |t|
      t.references :post, index: true
      t.string :image
      t.timestamps null: false
    end
    add_foreign_key :post_attachments, :posts
  end
end


Раз уж вы пользуетесь чистым html, то вьюха должна получиться примерно такой, могу ошибиться, привык к haml:

<label for="post_image">Выберите одну  или несколько фотографий</label>
<div class="field">
<input multiple="multiple" name="post_attachments[image][]" type="file" id="post_attachments_image">
</div>


Контроллер:

if @post.save
  unless params[:post_attachments].blank?
          params[:post_attachments]['image'].each do |a|
            @post.post_attachments.create!(:image => a)
          end
  redirect :"/"
  ....


@post.image = params[:image] и соответствующее поле соответственно нужно убрать из постов.

В моделях:
class PostAttachment < ActiveRecord::Base
  mount_uploader :image, ImagesUploader
  belongs_to :post
end

class Post < ActiveRecord::Base
  has_many :post_attachments, :dependent => :destroy
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы