Только что начал использовать carrierwave с Rails, и все шло гладко с одним небольшим исключением. Я создал класс ImageUploader, который выглядит так:
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
def extension_white_list
%w(jpg jpeg gif png)
end
end
и действие контроллера, которое выглядит так:
def update
@user = current_user
if params[:user].nil? || params[:user][:image].nil?
redirect_to user_path(@user)
else
if @user.update_attribute(:image, params[:user][:image])
flash[:success] = "Profile updated successfully!"
redirect_to user_path(@user)
else
flash[:error] = "Changes could not be saved."
render :action => 'edit'
end
end
end
В этом случае я установил загрузчик в свой User.rb следующим образом:
mount_uploader :image, ImageUploader
Проблема в том, что, согласно Carrierwave README , загруженные файлы с расширениями, отсутствующими в extensions_white_list, должны сделать запись недействительной. В моем случае я специально тестировал приложение, загружая файлы с различными расширениями, которых нет в белом списке, и никаких ошибок не возникает. Фактически, @ user.update_attribute, кажется, проходит, и я обычно перенаправлен на user_path (@user) с сообщением flash [: success]. Само изображение фактически не изменяется, но я хотел бы иметь возможность отловить ошибку и перенаправить на страницу «edit» в случае неправильного типа расширения. Любые идеи о том, что я делаю здесь не так?