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