2016-12-30 103 views
-1

我正在編寫一個Ruby on Rails 5應用程序。我剛剛學會了如何上傳圖片,而不使用回形針,載波或重定向。我過去曾經使用過重複函數,但是對於這個應用程序,我想學習如何去做那些第三方的寶石。這並不難。我已經成功上傳了一個文件。我的問題是之後訪問圖像!我認爲這會很簡單。但不是!Rails:上傳後訪問圖像文件

我有圖像文件被上傳到「/public/images/page/image.jpg」

我已經加入「/公/圖片/頁」在應用程序/初始化/ assets.rb資產路徑

我試圖直img標籤是這樣的:

<img class="pic left" src="/public/images/page/mars01.jpg" alt="Mars01" /> 

我得到一個 「(無路由匹配[GET] 」/public/images/page/mars01.jpg「)」 的錯誤。 我試過了:

<%= image_tag "/public/images/page/#{@page.image}", class: 'pic left' %> 

與標籤基本相同,得到的結果相同。還嘗試過:

<img class="pic left" src='<%= image_path "#{@page.image}" %>' /> 

仍然會出現路由錯誤,但只能查看「/ images」目錄。我仍然處於開發模式,所以我認爲image_path將是正確的路徑。

訪問圖像的正確方法是什麼?剛剛上傳到資產管道以外的目錄?這將在開發或生產環境中工作?我真的認爲這將是直截了當的。

+0

您正試圖訪問上傳的靜態圖像,您不能使用資產管道。我將刪除您添加到assets.rb的設置,並直接指向圖像路徑:'Rails.root.join('public','image','mars01.jpg').to_s' – Mat

回答

0

這是我最終爲有興趣的人做的事情。

在我的控制器

我這樣做:

# default to development go to app/assets/images 
path = Rails.root.join('app', 'assets', 'images', uploaded_io.original_filename) 
if ENV['RAILS_ENV'] == 'production' 
    # change only if in production to public/assets/images 
    Rails.root.join('public', 'assets', 'images', uploaded_io.original_filename) 
end 
File.open(path, 'wb') do |file| 
    file.write(uploaded_io.read) 
end 

基於RAILS_ENV;如果開發,圖像將去app/assests/images文件夾;如果在生產中他們去公共/資產/圖像。

,並用直截了當IMAGE_TAG:

<%= image_tag "#{@page.image}" %> 

工作就像一個魅力。至少我知道它適用於開發環境。 感謝那些迴應。 (Mat和長崎)

0

您不必在image_tag內提供完整的圖像路徑,只需將圖像名稱與子目錄一起存在即可。

因此請嘗試<%= image_tag "#{@page.image}", class: 'pic left' %>

請閱讀有關資產管道的更多信息。 http://guides.rubyonrails.org/asset_pipeline.html