@andreychumak
junior

(Sinatra + CarrierWave) Почему не загружается изображение?

Почему-то не сохраняются файлы, которые я подгружаю с помощью Carrierwave в uploads?
В таблице Posts создал поле image, которое заполняется загруженным файлом.
А в /public/uploads не помещаются файлы.
Подскажите, в чем может быть причина?
В логах image тоже нет.
SQL (0.9ms)  INSERT INTO "posts" ("title", "summary", "body", "vendor", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"  [["title", "fffffffffffffffffffffff"], ["summary", "1111111111"], ["body", "aaaaaaaaaaaaaaaaa"], ["vendor", "http://ru.stackoverflow.com/"], ["created_at", 2016-11-22 08:19:32 UTC], ["updated_at", 2016-11-22 08:19:32 UTC]]


При дебаггинге

[1] pry(#<Sinatra::Application>)> params
=> {"post"=>{"title"=>"sssssssssss", "summary"=>"", "body"=>"ss", "vendor"=>""},
 "image"=>
  {:filename=>"new1.jpg",
   :type=>"image/jpeg",
   :name=>"image",
   :tempfile=>#<File:/tmp/RackMultipart20161122-3054-lu5e6w.jpg>,
   :head=>
    "Content-Disposition: form-data; name=\"image\"; filename=\"new1.jpg\"\r\nContent-Type: image/jpeg\r\n"}}

model

class Post < ActiveRecord::Base
  mount_uploader :image, ImagesUploader
end


migration

class CreatePosts < ActiveRecord::Migration[5.0]
  def change
    create_table :posts do |t|
      t.string :image
    end
  end
end


controllers
# form for new posts
get '/new' do
  @post = Post.new
  erb :"new"  
end

# save
post '/posts' do
  @post = Post.new(params[:post])

  if @post.save
    redirect :"/"
  else
    redirect :"/new"
  end
end


ImagesUploader
class ImagesUploader < CarrierWave::Uploader::Base
  # include CarrierWave::MiniMagick

  storage :file

  def store_dir
    "uploads/images/#{model.id}"
  end

  # version :thumb do
  #   process resize_to_fit: [400, 400]
  # end

  # def extension_whitelist
  #   %w(jpg jpeg png gif)
  # end
end
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
не знаю синатру, но что вижу у вас
class Post < ActiveRecord::Base
  mount_uploader :image, 
end

что вижу в документации к CarrierWave:
class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end


после "@post = Post.new(params[:post])" попробуем добавить "@post.image = params[:image]"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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