剛剛開始使用carrierwave和Rails,事情一直在順利進行,只有一個小例外。我創建了一個「ImageUploader」類,它看起來如此:Rails Carrierwave White_List沒有拋出異常
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似乎已通過,我通常使用flash [:success]消息重定向到user_path(@user)。圖像本身並沒有真正改變,但我希望能夠捕捉到錯誤,並在錯誤的擴展類型的情況下重定向到「編輯」頁面。關於我在這裏做錯的任何想法?