carrierwave 取得檔案名稱

用carrierwave上傳圖片後,在show的view裡除了顯示圖片之外通常也會要顯示圖片名稱,所以今天在上傳圖片後要抓圖片名稱時發現了一個很有趣的現象。
直接上code
在create的時候不管是用identifier,filename,或是file.filename都可以讀取到圖片的名稱

photo.rb
def create
    if @photo.save
    binding.pry
    #@photo.image.identifier => xxx.jpg

    #@photo.image.filename => xxx.jpg

    #@photo.image.file.filename => xxx.jpg

end

但是到了create以外的action,例如show的情況就會變不一樣了

photo.rb
def show
    @photo = Photo.find(params[:id])
  binding.pry
    #@photo.image.identifier => nil

    #@photo.image.filename => nil

    #@photo.image.file.filename => xxx.jpg

end

變成只能用file.filename才能取到檔案名稱,真的是一件很妙的事情
這個是在carriverwave的issues裡的討論,看了一下還是有點一知半解的不太清楚為什麼會發生這樣的事情。有興趣的人可以看一下。
.identifier not working after record saved, _identifier not working before record saved

comments powered by Disqus