2014-04-02 24 views
1

我們在應該顯示圖像的引擎下有一個視圖。這個圖像(Button-Blank-Red-icon.png)保存在引擎的路徑「app/assets/images/engine_name/Button-Blank-Red-icon.pngRails引擎:在引擎下訪問圖像

我試着嘗試下面的錯誤爲了顯示這種觀點

的ActionController :: RoutingError(無路由匹配[GET] 「/圖片/ <>引擎名稱> /Button-Blank-Red-icon.png」):

什麼是正確的方式顯示存儲在引擎的應用/資產/圖片/引擎名稱/圖片中的圖片

以下是視圖代碼:

<img src="<%= RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator] %>" height="15" width="15" /> 

r.step_qties.last.ontime_indicator回報 '綠色', '紅色' 和 '黃色'

不斷RED_GREEN_YELLOW_CLS的定義是my_constant.rb下發動機的配置/初始化/之一:

RED_GREEN_YELLOW_CLS = { 
         'green' => '/Button-Blank-Green-icon.png', 
         'red' => '/Button-Blank-Red-icon.png', 
         'yellow' => '/Button-Blank-Yellow-icon.png' 
         } 

一個工作帶有圖像標籤的解決方案(參見集合#277 in railscasts.com):

<%=image_tag(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator], size: '23x23') %> 

沒有必要阻止。

的my_constant.rb是:

RED_GREEN_YELLOW_CLS = { 
         'green' => 'engine_name/Button-Blank-Green-icon.png', 
         'red' => 'engine_name/Button-Blank-Red-icon.png', 
         'yellow' => 'engine_name/Button-Blank-Yellow-icon.png' 
         } 
+0

你用來顯示圖像的呼叫是什麼? 'image_path'? –

+0

請張貼一些代碼。你編譯了你的資產嗎? – rb512

+0

剛剛使用image_tag提供了一個可行的解決方案更新了該文章。 – user938363

回答

1

它看起來像你通過AssetUrlHelpers顯示圖像。需要改變以下視圖代碼:

<img src="<%= image_path(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]) %>" 
    height="15" width="15" /> 

image_path是要正確添加路徑的assets部分,由資產產生的管道的散列一起,讓你得到一個正確的URL。

+0

它沒有顯示任何與image_path。沒有資產路徑添加。 – user938363

+0

@ user938363我遇到了類似問題,其中未添加'/ asset'。這是因爲資產代碼在資產註冊之前只執行過一次(有點像初始化代碼)。解決方案最終需要將路徑包裝在lambda中,以便每次都執行,而不僅僅是一旦。很難說,如果您遇到這個問題,您現在的代碼已經發布了。 –

1

正確的url應該是「/ assets/<> engine_name> /Button-Blank-Red-icon.png」,因爲當rails編譯資源時,它只會混合/ images/stylesheets和/ javascript的所有內容所有寶石和您的應用程序/資產都在公共/資產內部。它只會複製「<> engine_name>」文件夾,它的內容。

目前還不清楚:「/ images/<> engine_name> /Button-Blank-Red-icon.png」是從哪裏來的,我不知道如何從你展示的代碼中獲得。

嘗試將您使用的內容更改爲「/ assets/<> engine_name>/...」,它應該可以工作。

您可以嘗試手動編譯您的資產並查看文件的位置,只需執行「捆綁執行rake資產:編譯RAILS_ENV =生產」,您可以在該測試之後安全地刪除/ public/assets以保持其清潔。

+0

添加/ images/engine_name「後,它會導致一個錯誤」語法錯誤,意外tidENTIFIER,期待')'「 – user938363

+0

你有一個語法錯誤,你現在的代碼是? – arieljuod

1

你試過asset_path幫手嗎?

<%= image_tag(asset_path("engine_name/#{RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]}"), size: '23x23') %> 

將engine_name替換爲引擎應用程序的實際名稱。從發動機

+1

我希望你的答案被標記爲正確的。最終重複它:) – drKreso

1

圖像是通過訪問:

http://localhost:3000/assets/engine_name/image.png 

所以你說

<img src="<%= asset_path(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]) %>" height="15" width="15" /> 

RED_GREEN_YELLOW_CLS = { 
         'green' => 'engine_name/Button-Blank-Green-icon.png', 
         'red' => 'engine_name/Button-Blank-Red-icon.png', 
         'yellow' => 'engine_name/Button-Blank-Yellow-icon.png' 
         } 

會工作。

p.s.我發現r.step_qties.last.ontime_indicator親自侮辱列車殘骸。 :)