你使用File.open
會工作的解決方案,但你應該驗證名稱是File.basename
有效,以便有人能不能通過../../secret_credentials.yml
和暴露你不希望他們的信息。同時檢查它與預設圖像列表將是一個好主意。
但是,在這種情況下,您可以通過跳過CarrierWave更高效地完成此操作。
添加一個新字段,名爲library_image
,當有人想要使用預設圖像時,則您設置library_image
,如果他們想使用自己的照片,請取消設置library_image
並正常上傳照片。然後添加一個輔助方法,如:
def avatar_url
if self.library_image?
"http://example.com/images/#{self.library_image}"
else
self.picture.url
end
end
這是假設你可以在http://example.com/images/[name]
找到預設的圖像,並且使用mount_uploader
在CarrierWave命名picture
。
現在任何時候你想要顯示他們的圖片,你會打電話avatar_url
,這將檢查它是否應該返回預設的URL,或他們上傳的圖片。
你將如何更新library_image
或picture
一個例子根據你原來的問題:
if params[:file].is_a?(Hash)
model.library_image = params[:file][:url]
model.remove_picture = true
else
model.library_image = nil
model.picture = params[:file]
end
我如何可以檢測到用戶上傳新的圖片?我的意思是,我應該寫入什麼回調函數名稱來重置library_image?謝謝! – CamelCamelCamel 2012-08-08 06:08:09
@CamelCamelCamel我用一個例子更新了我的原始答案。 – 2012-08-08 18:46:37
如何根據avatar_url將文件作爲預設或文件返回? – CamelCamelCamel 2012-08-13 03:57:21