刚开始在 Rails 中使用carrierwave,事情进展顺利,只有一个小例外。我创建了一个看起来像这样的“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] 消息。图像本身实际上并没有改变,但我希望能够捕获错误并在扩展类型不正确的情况下重定向到“编辑”页面。关于我在这里做错了什么的任何想法?