Carrierwave save object instead filename in db or mount_uploader doesn't work

Viewed 1924

I use Carrierwave gem for uploading file, but I have a problem. Controller does not save avatar in database, despite the fact that the object comes in params from the view. If I remove mount_uploader from my model, Carrierwave save object in database instead filename. How can I fix it?

My user_controller.rb

  class UsersController < ApplicationController

   before_action :set_user

    def show
    end

   def edit
   end

   def update
    if @user.update(users_params)
     redirect_to user_path(current_user.id)
    else
     puts @user.inspect
     flash.now[:alert]= 'Something wrong'
     render :edit
   end
 end
  def set_user
    @user = User.find(params[:id])
  end

 def users_params
   params.require(:user).permit(:avatar)
  end

  def new
  end


end

my user.rb model

 class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable, 
      omniauth_providers: [:facebook]

      has_one :account, dependent: :destroy
      mount_uploader :avatar, AvatarUploader
  end

edit.html.haml

.container
  %h1 Edit
  = form_for @user, html: { :multipart => true } do |f|
   = f.label :id
   = f.file_field :avatar
   = f.submit

avatar_uploader.rb

  class AvatarUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process resize_to_fit: [50, 50]
  end

 def extension_whitelist
   %w(jpg jpeg gif png)
 end
end
1 Answers
Related